Подождите, пока несколько URLSessionDataTask, чтобы закончить?
У меня есть следующие определения для запроса некоторых данных в службу REST:
private let operationQueue = OperationQueue()
private var defaultSession: URLSession
private var dataTask: URLSessionDataTask?
override init() {
self.operationQueue.qualityOfService = .userInitiated
let configuration = URLSessionConfiguration.default
self.defaultSession = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)
super.init()
}
func searchInfo(searchUrl: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
dataTask = defaultSession.dataTask(with: searchUrl, completionHandler: completion)
dataTask?.resume()
}
Мне нужно выполнить N
одновременно с этим dataTask
и ждать, пока все они не закончат, чтобы показать все результаты пользователю сразу.
Если я не ошибаюсь, когда имеем дело с Operation
есть OperationBlock
что позволяет сделать это, и DispatchGroup
что делает то же самое, когда имеет дело непосредственно с Grand Central Dispatch
, Но я не знаю, как мне справиться как с параллелизмом, так и с ожиданием завершения всех задач с URLSessionDataTask
Я имею.
РЕДАКТИРОВАТЬ: В ответе, предложенном @rmaddy, я не уверен, если OperationQueue
используется для планирования задач. Я настроил свой URLSession
использовать один. Как это влияет на параллелизм, который мне нужен для достижения? Нужна ли мне какая-либо дополнительная конфигурация для этой очереди, чтобы разрешить параллелизм? Правильно ли "смешать" это с DispatchGroup
?