ผมมีเรื่องมากมายให้ต้อง(~200)ที่อยู่ url สำหรับภาพต่างๆแล้วฉันต้องการที่จะดาวน์โหลดแต่ละคนงั้นโพรเซส(ปรับขนาดมันแล้วปรับปรุงแคช เรื่องก็คือ-ฉันแค่อยากจะต้องตอนแม็กซ์ 3 ร้องของที่ครั้งหนึ่งแล้วตั้งภาพเป็นหนักฉันก็ไม่อยากเป็นมากมายจะฟื้นคืนชีพ"อยู่"รอคอยที่จะถูกประมวลผล(และจะเอาความทรงจำ...).
TLDR ฉันอยากโทรหาคนต่อไป(4)บนเครือข่ายการร้องขอเพียงหลัง receiveValue
ใน sink
เป็นชื่อบนหนึ่งในแรงบันดาลของฉันเมื่อ 3 คำขอร้อง...(ie หลังจากเครือข่ายการตอบสนอ&กำลังประมวลผลเป็นทั้งสองทำ...).
เรื่องนี้มันไหลเวียนงานและมันจะเก็บมันไว้รอที่อยู่ 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)
ไว้บนอ่างจบการสมัครสมาชิกของฉันตลอดไปเหรอ? (ie ไม่สนใจเรื่องอนาคตค่าของ emitted)