Mám hodně (~200) adres url obrázků, a je třeba stáhnout každý, pak proces (změna velikosti), pak aktualizovat cache. Věc se má tak - já jen chci mít na max 3 žádostí najednou, a protože obrázky jsou těžké, já také nechci hodně odpovědí "visí" čeká na zpracování (a s pamětí...).
TLDR chci zavolat další (4) požadavek sítě pouze po receiveValue
v sink
je tzv. na jeden z prvních 3 požadavky... (tj. po síti odezva a zpracování jsou oba...).
Bude to tok práce, a bude to držet na čekat url a ne je shodit na zem?
Také musím, že buffer()
volání? Já ji použít poté, co viděl tuto odpověď: https://stackoverflow.com/a/67011837/2242359
wayTooManyURLsToHandleAtOnce // this is a `[URL]`
.publisher
.buffer(size: .max, prefetch: .byRequest, whenFull: .dropNewest) // NEEDED?
.flatMap(maxPublishers: .max(3)) { url in
URLSession.shared
.dataTaskPublisher(for: url)
.map { (data: Data, _) -> Picture in
Picture(from: data)
}
}
.tryCompactMap {
resizeImage(picture: $0) // takes a while and might fail
}
.receive(on: DispatchQueue.main)
.sink { completion
// handling completion...
} receiveValue: { resizedImage
self.cache.append(resizedImage)
}
.store(...)
self.subject.send(completion: .finished)
na dřezu end předplatné navždy? (ie ignoruje budoucí hodnoty vyzařovaného)