【发布时间】:2021-06-26 08:09:16
【问题描述】:
当我们对 UrlSession 执行 reset(completionHandler:) 时,会话中的当前任务会发生什么。 此外,如果它取消当前任务,那么我们如何在调用 reset(completionHandler:) 之前等待当前任务完成
【问题讨论】:
标签: ios swift nsurlsession nsurlsessionconfiguration
当我们对 UrlSession 执行 reset(completionHandler:) 时,会话中的当前任务会发生什么。 此外,如果它取消当前任务,那么我们如何在调用 reset(completionHandler:) 之前等待当前任务完成
【问题讨论】:
标签: ios swift nsurlsession nsurlsessionconfiguration
当你调用 URLSession reset 时,所有正在运行的任务继续运行。
使用reset 的一个常见用例是,您希望清除与已登录用户关联的所有数据,例如“退出”功能。 在调用reset 之前恢复的请求可能使用旧 URL 凭据存储,但是当响应完成时它们可能使用新 URL 缓存。这肯定不是你想要的。
因此,实现此目的的更稳健的方法如下:
reset,然后新任务将使用新的“会话环境”,之前恢复的任务将完成并出现取消错误。
第一个要点可能是最复杂的一个,因为您需要确保甚至不使用与 旧 会话环境关联的数据创建请求。这可以使用网络层来解决,该网络层具有将传入的高级“API 请求”排队的功能,并且该队列可以暂停和恢复。
【讨论】: