Я просматриваю исходный код 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
, который в данном случае возвращает URLSessionTask
.
Так что мой вопрос, когда именно session.dataTask(with: urlRequest)
внутри queue.sync {}
работает?это когда метод достигает этой строки перед фактическим возвратом или когда используется возвращаемый объект?