При работе с сетевыми запросами зачастую возникает следущий кейс: программе нужно выполнить сразу несколько запросов и дождаться завершения каждого из них прежде, чем переходить к следующему этапу. Самый удобный инструмент для этого — DispatchGroup.
Основные методы для работы с DispatchGroup:
.enter — вход в группу;
.leave — выход из группы;
.notify(queue: DispatchQueue) — оповещение о завершении работы группы.
Пример 1
Рассмотрим первый пример, в котором нам необходимо дождаться завершения работы трёх методов.
Рассмотрим работу кода построчно:
3–19: объявление методов. Искусственно делаем так, чтобы ответ от запросов мы ждали 2, 4 и 6 секунд;
21: объявление группы;
23: вход в группу. Теперь группа будет ожидать, пока её счетчик не обнулится, и только тогда будет вызван group.notify;
26: получение ответа от метода request1 и выход из группы;
41: вызов group.notify будет осуществлен только тогда, когда её счетчик обнулится. Иначе говоря, за каждым вызовом group.enter()должен последовать вызов group.notify().
В результате выполнения кода в консоль будет выведен следующий ответ: