我正在使用以下代码向我的服务器发出请求:
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/