NSURLSessionTask.暂停不起作用

And*_*kha 6 ios nsurlsession swift nsurlsessiondatatask

这就是Apple的文档中关于课程suspend方法的说法NSURLSessionTask

任务暂停时不会产生网络流量,也不会超时.

好.所以我运行以下简单代码:

        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")
        })
Run Code Online (Sandbox Code Playgroud)

函数delay只是一个包装器dispatch_after,请求http://httpbin.org/delay/10在10秒后给出响应.在等待响应的过程中,我暂停了任务.然而,这不起作用.在60秒内,将调用完成块并显示超时错误.任何人都可以解释一下是什么问题吗?

Rya*_* H. 5

这似乎是正常的行为,但Apple的更明确的文档将有助于澄清我们所看到的内容.

Apple的文档没有提供有关暂停如何工作或何时应该使用的详细说明.但是,我的观点(基于测试和研究)suspend()应该只用于下载任务.数据任务应仅在适当时使用resume()(启动任务)cancel().

我使用Xcode和Charles Proxy进行的测试显示,暂停数据任务对Apple网络流量没有影响,如Apple的文档中所示.换句话说,产生了网络流量.

我使用挂起和数据任务观察了两件事:

1)如果在恢复后立即调用它,它对数据任务没有影响.它不会暂停网络流量并且不会阻止网络或服务器端侧问题,在回调中会收到成功的响应.

2)如果在dispatch.asyncAfter回调中调用它,它仍然不会挂起网络流量,但是回调会收到"请求超时"错误而不是成功响应.根据Charles Proxy的说法,请求是成功的.正是这个结果让我相信suspend()不应该用于数据任务.在我看来,这个回调的结果基本上没用.

取消数据任务:

cancel()按预期工作.客户端(您)在从服务器获得完整响应之前关闭连接.这可以在致电之后立即完成resume()(稍后在请求完成之前).