我知道在NSURLSession上调用getTasksWithCompletionHandler
:
异步调用包含所有未完成数据的完成回调, 上传,并在会话中下载任务。
但是,从实验中,我可以看到该方法返回的数据,上传和下载任务数组;
func getTasksWithCompletionHandler(_ completionHandler: ([NSURLSessionDataTask], [NSURLSessionUploadTask], [NSURLSessionDownloadTask]) -> Void)
实际上只显示正在执行的任务。即,已收到resume()
的任务。
通过在Playground中粘贴此代码可以看到这一点:
import UIKit
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let url = NSURL(string: "http://jsonplaceholder.typicode.com")
let request: NSURLRequest = NSURLRequest(URL: url!)
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
NSLog("Done")
})
session.getAllTasksWithCompletionHandler { (tasks:[NSURLSessionTask]) -> Void in
NSLog("\(tasks)")
XCPlaygroundPage.currentPage.finishExecution()
}
//task.resume()
请注意,getTasksWithCompletionHandler
和getAllTasksWithCompletionHandler
- 后者在iOS 9中发布 - 似乎只在完成闭包的签名上有所不同。
另外,有点诱人的是,NSURLSessionTask
有一个state
属性NSURLSessionTaskState
,它为我们Running
,Suspended
,Canceling
,{{1 }}
有没有办法访问非执行任务列表;那些已经被Completed
但尚未恢复的人?