Вопрос проверяет знание DispatchGroup, понимание группировки асинхронных задач и способов синхронизации их завершения.
DispatchGroup позволяет отслеживать завершение нескольких асинхронных задач. Основные методы — enter, leave, notify и wait. С их помощью можно понять, когда группа задач полностью завершилась. Это удобно для координации параллельных операций. DispatchGroup часто используют для сетевых запросов.
DispatchGroup нужен для решения одной простой, но важной задачи — понять, когда несколько асинхронных операций завершились.
DispatchGroup не управляет выполнением задач.
Он только отслеживает их состояние.
enter()
Сообщает группе, что началась новая задача.
Обычно вызывается перед запуском асинхронной операции.
leave()
Сообщает группе, что задача завершилась.
Количество leave должно строго соответствовать количеству enter.
notify(queue:)
Выполняет блок, когда счетчик группы становится равным нулю.
Это основной и самый безопасный способ узнать о завершении всех задач.
wait()
Блокирует текущий поток до завершения всех задач группы.
Используется редко из-за риска блокировок.
Создается DispatchGroup
Для каждой асинхронной задачи вызывается enter
В конце каждой задачи вызывается leave
В notify обрабатывается общий результат
забытый leave
вызов wait на main queue
несоответствие enter и leave
DispatchGroup удобен для координации асинхронных операций, но требует аккуратного баланса enter и leave.