2

我知道调用getTasksWithCompletionHandlerNSURLSession:

使用会话中的所有未完成数据、上传和下载任务异步调用完成回调。

但是,通过实验,我可以看到该方法返回的数据、上传和下载任务数组;

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()

请注意,getTasksWithCompletionHandlerand getAllTasksWithCompletionHandler(后者在 iOS 9 中发布)似乎仅在完成闭包的签名上有所不同。

此外,有点诱人的是,NSURLSessionTask它有一个state属性NSURLSessionTaskState给我们Running, Suspended, Canceling, Completed.

有没有办法访问非执行任务列表;那些已经添加到NSURLSession还没有恢复的?

4

0 回答 0