가 많이(~200)url 이미지,그리고 내가 다 각각의 하나는,다음 과정을(크기),그 후 업데이트 캐시가 있습니다. 는 것입니다-나는 단지에는 최대 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)
에서 싱크로 끝 구독 forever? (ie 을 무시하고 미래 값을 방출되)