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