Подождите, пока несколько 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?

0 ответов

Другие вопросы по тегам