在flash中是session.dataTask是异步的吗?

时间:2017-10-26 12:19:01

标签: ios swift multithreading nsurlsessiondatatask

我正在使用以下代码向我的服务器发出请求:

let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)
let dataTask = session.dataTask(with: request as URLRequest) { (data, response, error) in
     if error != nil {
          DispatchQueue.main.async(execute: {
              completion(nil, error as NSError?)
          })
          return
     }
     DispatchQueue.main.async(execute: {
          code...
     })    
}
dataTask.resume()

从我所看到的,这不应该阻止主线程,但它似乎正在这样做。我是否需要在调度到另一个线程后调用此代码?即:

DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {

}

或者是dataTask本身是异步请求的,以便不阻塞主线程并将其分配到另一个线程将是多余的?

1 个答案:

答案 0 :(得分:4)

是系统URLSession dataTask本质上是async。每当使用完成处理程序进行系统API调用时,API本质上始终为async。总结一下,上面的实现是正确的。您无需将任务放在全局队列中。