提问者:小点点

NSUrlSession重置(CompletionHandler:)


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


共1个答案

匿名用户

当您调用URLSessionreset时,所有正在运行的任务都将继续运行。

使用reset的一个常见用例是,您希望清除与已登录用户相关联的所有数据(例如,“注销”特性)。在调用reset之前恢复的请求可能使用旧的URL凭据存储,但在响应完成时,它们可能使用新的URL缓存。这当然不是你想要的。

因此,实现这一点的一个更健壮的方法如下所示:

  • 阻止启动新任务(避免任何数据争用问题)
  • 清除与旧的“会话环境”相关联的所有数据--可能包括访问令牌和用户数据等
  • 取消所有正在运行的任务(异步启动并忘记),然后
  • 调用重置,然后
  • 启用继续任务。

新任务将使用新的“会话环境”,以前恢复的任务将在取消错误的情况下完成。

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