Ответ
Да, можно. Экземпляры DispatchGroup независимы и предназначены для отслеживания выполнения разных наборов асинхронных задач.
Пример использования нескольких групп:
let imageDownloadGroup = DispatchGroup()
let dataProcessingGroup = DispatchGroup()
// Задача в первой группе
imageDownloadGroup.enter()
downloadImage { image in
// Обработка изображения
imageDownloadGroup.leave()
}
// Задача во второй группе
dataProcessingGroup.enter()
processData { result in
// Обработка данных
dataProcessingGroup.leave()
}
// Ожидание завершения каждой группы
imageDownloadGroup.notify(queue: .main) {
print("Все изображения загружены")
}
dataProcessingGroup.notify(queue: .main) {
print("Вся обработка данных завершена")
}
Преимущества:
- Разделение ответственности. Позволяет независимо управлять разными этапами работы (например, загрузка и обработка).
- Гибкость. Можно комбинировать
wait()иnotify()для разных групп, создавая сложные сценарии синхронизации. - Потокобезопасность.
DispatchGroupсам по себе потокобезопасен, его можно использовать из любого потока.