我知道调用getTasksWithCompletionHandler
NSURLSession:
使用会话中的所有未完成数据、上传和下载任务异步调用完成回调。
但是,通过实验,我可以看到该方法返回的数据、上传和下载任务数组;
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
and getAllTasksWithCompletionHandler
(后者在 iOS 9 中发布)似乎仅在完成闭包的签名上有所不同。
此外,有点诱人的是,NSURLSessionTask
它有一个state
属性NSURLSessionTaskState
给我们Running
, Suspended
, Canceling
, Completed
.
有没有办法访问非执行任务列表;那些已经添加到NSURLSession
还没有恢复的?