【问题标题】:NSUrlSession reset(completionHandler:)NSUrlSession 重置(completionHandler:)
【发布时间】:2021-06-26 08:09:16
【问题描述】:

当我们对 UrlSession 执行 reset(completionHandler:) 时,会话中的当前任务会发生什么。 此外,如果它取消当前任务,那么我们如何在调用 reset(completionHandler:) 之前等待当前任务完成

【问题讨论】:

    标签: ios swift nsurlsession nsurlsessionconfiguration


    【解决方案1】:

    当你调用 URLSession reset 时,所有正在运行的任务继续运行。

    使用reset 的一个常见用例是,您希望清除与已登录用户关联的所有数据,例如“退出”功能。 调用reset 之前恢复的请求可能使用 URL 凭据存储,但是当响应完成时它们可能使用 URL 缓存。这肯定不是你想要的。

    因此,实现此目的的更稳健的方法如下:

    • 防止启动新任务(避免任何数据竞争问题)
    • 清除与旧“会话环境”相关的所有数据 - 其中可能包括访问令牌和用户数据等。
    • 取消所有正在运行的任务(异步 - 触发并忘记),然后
    • 拨打reset,然后
    • 启用恢复任务。

    新任务将使用新的“会话环境”,之前恢复的任务将完成并出现取消错误。

    第一个要点可能是最复杂的一个,因为您需要确保甚至不使用与 会话环境关联的数据创建请求。这可以使用网络层来解决,该网络层具有将传入的高级“API 请求”排队的功能,并且该队列可以暂停和恢复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多