我正在浏览源代码
Alamofire
下面的片段让我有点困惑。
func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask {
do {
let urlRequest = try self.urlRequest.adapt(using: adapter)
return queue.sync { session.dataTask(with: urlRequest) }
} catch {
throw AdaptError(error: error)
}
}
这条线
queue.sync { session.dataTask(with: urlRequest) }
让我困惑。
如您所见,方法返回类型为
URLSessionTask
这正是什么
session.dataTask(with: urlRequest)
正在返回。
这个
queue.sync {}
是
func sync<T>(execute work: () throws -> T) rethrows -> T
,在本例中返回
.
所以我的问题是什么时候
session.datatask(带有:urlrequest)
里面
queue.sync_
跑?方法是在实际返回之前到达此行,还是在使用返回的对象时到达此行?