当前位置: 首页 > 知识库问答 >
问题:

NSUrlSession重置(CompletionHandler:)

陶健
2023-03-14

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

共有1个答案

乜烨霖
2023-03-14

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

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

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

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

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

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

 类似资料:
  • 问题内容: 我注意到执行和启动任务有时会抛出EXC_BAD_ACCESS。给出错误的实际调用方法似乎有所不同,但始终来自。在大多数情况下,调用方法来自。我在下面附加了两个崩溃日志,其中包含不同的调用方。我还附加了的实现。 不幸的是,我无法可靠地重现该错误,因此没有共享的示例脚本。创建和启动对象最终将产生错误。较大的文件似乎更经常发生。我在这里实施错了吗?有没有一种好的方法可以从此堆栈跟踪进行调试?

  • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容:

  • 如果url正确,我在调试导航器中看不到任何队列,因为它没有再次调用方法。我在networking库中引用了相同的内容,但我想它的工作方式与我在NSURLSession中的工作方式相同,对吗? 案例:-我检查url是否存在,所以如果存在,就加载两个url(time.txt和image.png),否则调用WebService(XmlParser)&保留以下文件的url检查。 显示哪个存在。

  • 问题内容: 如何在Swift中将证书固定到NSURLSession? 该OWASP网站只包含Objective- C和NSURLConnection的一个例子。 问题答案: Swift 3+ 更新: 只需定义一个委托类并实现didReceiveChallenge函数( 此代码改编自Objective-c OWASP示例 ): (您可以在此处找到Swift 2 的Gist- 从初始答案开始) 然后使

  • 问题内容: 我有一个NSURLSession调用dataTaskWithRequest以这种方式发送POST请求 响应等于: 我的问题是我不知道如何获取名称为MYCOOKIEIS的“ Set-Cookie”中的cookie。 我将在用户登录时使用它,因此,如果用户未登录->登录(调用登录api),否则请转到主屏幕并调用其他API。 有人可以帮助我从那里拿走饼干吗? 问题答案: Swift呈现形式可

  • 在一个示例演示应用程序中,我使用React Native进行网络调用。实际上,React Native使用和作为默认缓存策略。当进行网络调用时,服务返回的响应包含以下缓存控件标头: 基于14.9.4缓存重新验证和重新加载控制部分,这不应该是预期的行为,但也许我错了。 因为高速缓存可以被配置为忽略服务器的指定过期时间,并且因为客户端请求可以包括max-stale指令(具有类似的效果),所以该协议还包