Вопрос проверяет знание механизмов синхронизации GCD и умение координировать несколько асинхронных задач.
Для ожидания выполнения группы асинхронных задач в GCD используется DispatchGroup. В группу добавляются задачи, а затем можно получить уведомление о завершении всех операций. Это удобно для параллельных запросов или вычислений. Главное — корректно вызывать enter() и leave().
В реальных приложениях часто требуется запустить несколько асинхронных операций и продолжить работу только после их завершения. GCD предоставляет для этого DispatchGroup.
Определение:
DispatchGroup — это объект, который отслеживает выполнение набора асинхронных задач.
Он позволяет:
дождаться завершения всех задач
выполнить код после их окончания
не блокировать основной поток
Сначала задачи добавляются в группу:
let group = DispatchGroup()
group.enter()
DispatchQueue.global().async {
// первая задача
group.leave()
}
group.enter()
DispatchQueue.global().async {
// вторая задача
group.leave()
}
После этого можно подписаться на завершение:
group.notify(queue: .main) {
// все задачи завершены
}
Метод wait() блокирует поток:
group.wait()
Использовать его стоит:
только в фоновых потоках
в тестах или сервисных слоях
DispatchGroup — основной и безопасный способ дождаться завершения нескольких асинхронных задач в GCD.