这是苹果的文档所说的suspend
的方法NSURLSessionTask
class
任务在挂起时不会产生网络流量,也不会超时。
好的。所以我运行以下简单的代码:
let url = NSURL(string: "http://httpbin.org/delay/10")!
let urlRequest = NSURLRequest(URL: url)
self.task = NSURLSession.sharedSession().dataTaskWithURL(urlRequest.URL!, completionHandler: {
data, response, error in print("completion ERROR \(error)")
})
self.task.resume()
print("Start")
delay(5, closure: {
self.task.suspend()
print("Suspend")
})
功能delay
只是一个包装dispatch_after
并请求http://httpbin.org/delay/10
10 秒后给出响应。在等待响应的过程中,我暂停了任务。但这不起作用。 60 秒后,调用完成块并出现超时错误。有人可以解释一下出了什么问题吗?
这似乎是正常行为,但是苹果提供的更明确的文档将有助于澄清我们所看到的情况。
Apple 的文档没有提供有关挂起如何工作或何时使用的详细说明。然而,my view(基于测试和研究)是suspend()
只能用于下载
任务。数据任务应该只使用resume()
(开始任务)和cancel()
在适当的时候。
我使用 Xcode 和 Charles Proxy 进行的测试显示,暂停的数据任务对网络流量没有影响,如 Apple 文档中所示。换句话说,产生了网络流量。
我使用挂起和数据任务观察到两件事:
1) 如果在resume后立即调用,则对数据任务没有影响。它不会暂停网络流量,除非没有网络或服务器端问题,否则会在回调中收到成功的响应。
2)如果在dispatch.asyncAfter
回调,它仍然不会暂停网络流量,但是回调会收到“请求超时”错误而不是成功的响应。根据 Charles Proxy 的说法,请求是成功的。正是这个结果让我相信suspend()
不应与数据任务一起使用。这个回调的结果在我看来基本上没什么用。
取消数据任务:
cancel()
按预期工作。客户端(您)在从服务器获得完整响应之前关闭连接。这可以在致电后立即完成resume()
或者稍后(当然是在请求完成之前)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)