मैं एक बहुत कुछ है (~200) यूआरएल के लिए छवियों, और मैं डाउनलोड करने की जरूरत है प्रत्येक एक है, तो प्रक्रिया (आकार) यह है, तो कैश अद्यतन. बात है - मैं केवल चाहते हैं के लिए है पर अधिकतम 3 अनुरोधों को एक ही बार में, और के बाद से छवियों भारी रहे हैं, मैं भी नहीं करना चाहते हैं प्रतिक्रियाओं का एक बहुत "फांसी" प्रतीक्षा करने के लिए संसाधित किया जा सकता (और स्मृति...).
TLDR मैं कॉल करना चाहते हैं अगले (4) नेटवर्क अनुरोध के बाद ही receiveValue
में sink
कहा जाता है पर एक पहले 3 अनुरोधों... (यानी नेटवर्क के बाद प्रतिक्रिया और प्रसंस्करण कर रहे हैं दोनों के...).
इस प्रवाह का काम है, और यह होगा पकड़ पर प्रतीक्षा करने के लिए url नहीं है और फर्श पर उन्हें ड्रॉप?
यह भी क्या मैं की जरूरत है कि buffer()
कॉल? मैं का उपयोग करें यह देखने के बाद इस सवाल का जवाब: 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)
सिंक पर अंत में मेरी सदस्यता हमेशा के लिए? (यानी की उपेक्षा कर भविष्य के मूल्यों उत्सर्जित)