从 `URLSession.dataTaskPublisher` 接收任务进度
Receive task progress from `URLSession.dataTaskPublisher`
通过实施 URLSessionDataDelegate.urlSession(_:dataTask:didReceive:)
委托方法并使用委托风格的“任务,task.resume()”调用风格,可以接收有关 URLSessionTask
的进度更新.
使用 API 的 Combine 风格,这似乎是不可能的。使用 URLSession.dataTaskPublisher(for:)
returns 发布者在完成后发布 (Data, URLResponse)
元组,但从不调用委托方法。这样,它与 URLSession.dataTask(with:completionHandler:)
方法非常相似,后者使用最终结果调用 completionHandler
,而不是进程中的 Progress
报告。
我是否缺少任何 API 或模式来允许进度报告,或者 URLSession 任务处理的 Combine 风格不提供检索进度的方法?
不,你没有遗漏任何东西。要检索进度信息,您需要构建自己的 Future 而不是使用内置数据任务发布者。
通过实施 URLSessionDataDelegate.urlSession(_:dataTask:didReceive:)
委托方法并使用委托风格的“任务,task.resume()”调用风格,可以接收有关 URLSessionTask
的进度更新.
使用 API 的 Combine 风格,这似乎是不可能的。使用 URLSession.dataTaskPublisher(for:)
returns 发布者在完成后发布 (Data, URLResponse)
元组,但从不调用委托方法。这样,它与 URLSession.dataTask(with:completionHandler:)
方法非常相似,后者使用最终结果调用 completionHandler
,而不是进程中的 Progress
报告。
我是否缺少任何 API 或模式来允许进度报告,或者 URLSession 任务处理的 Combine 风格不提供检索进度的方法?
不,你没有遗漏任何东西。要检索进度信息,您需要构建自己的 Future 而不是使用内置数据任务发布者。