"PassthroughSubject" кажется небезопасным.Пожалуйста, смотрите код ниже, я отправляю 100 значений одновременно подписчику, который запрашивает только .max(5)
.Я думаю, что подписчик должен получить только 5 значений, но на самом деле он получил больше.Это ошибка или ограничение?
// Xcode11 beta2
var count = 0
let q = DispatchQueue(label: UUID().uuidString)
let g = DispatchGroup()
let subject = PassthroughSubject<Int, Never>()
let subscriber = AnySubscriber<Int, Never>(receiveSubscription: { (s) in
s.request(.max(5))
}, receiveValue: { v in
q.sync {
count += 1
}
return .none
}, receiveCompletion: { c in
})
subject.subscribe(subscriber)
for i in 0..<100 {
DispatchQueue.global().async(group: g) {
subject.send(i)
}
}
g.wait()
print("receive", count) // expected 5, but got more(7, 9...)