ios - session.dataTask 是异步的吗?

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

从我读到的内容来看,这不应该阻塞主线程,但它似乎正在这样做。分派(dispatch)到另一个线程后是否需要调用此代码?即:

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

}

或者 dataTask 本身是异步请求的,以免阻塞主线程并将其分派(dispatch)给另一个线程是多余的吗?

最佳答案

是的,系统给定 URLSession dataTask 本质上是 async。每当有带有完成处理程序的系统 API 调用时,API 本质上始终是 async。综上所述,上述实现是正确的。您不需要将任务放入全局队列。

关于ios - session.dataTask 是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954162/

相关文章:

ios - 用于视网膜显示屏的所有 iDevices 的图像后缀

ios - 如何使用自动引用计数(ARC)?

multithreading - 微软的公寓类比 (STA, MTA) : Need help understanding it

java - 如何使用 setter 和 getter 函数实现线程安全类,其中使用 setter 的频率远高于 getter

ios - 无法在 Alamofire 4.0 中使用类型为 'append' 的参数列表调用 '(String, withName: String)'

ios - 尝试解析 json 时出现错误 : use of undeclared type 'Foundation'

ios - 更新 SnapKit 约束偏移量

ios - 如何处理 cookie 以保持用户使用 Swift 登录?

ios - 类不符合 Swift 中键的键值编码

java - 使 DateFormat 线程安全。使用什么,同步或线程本地