当我们对URLSession执行reset(CompletionHandler:)时,会话中的当前任务会发生什么。另外,如果它取消了当前任务,那么在调用reset(completionhandler:)之前,我们如何等待当前任务完成
当您调用URLSessionreset
时,所有正在运行的任务都将继续运行。
使用reset
的一个常见用例是,您希望清除与已登录用户相关联的所有数据(例如,“注销”特性)。在调用reset
之前恢复的请求可能使用旧的URL凭据存储,但在响应完成时,它们可能使用新的URL缓存。这当然不是你想要的。
因此,实现这一点的一个更健壮的方法如下所示:
重置
,然后新任务将使用新的“会话环境”,以前恢复的任务将在取消错误的情况下完成。
第一个要点可能是最复杂的,因为您需要确保甚至不使用与旧会话环境关联的数据来创建请求。可以使用网络层来解决这一问题,该网络层具有这样一个特性,即传入的高级“API请求”将被排队,并且该队列可以被挂起和恢复。