Группы задач позволяют динамически создавать и управлять несколькими параллельными дочерними задачами во время выполнения — полезно, когда количество операций не известно на этапе компиляции.
withTaskGroup или withThrowingTaskGroupgroup.addTask {}for awaitawait withTaskGroup(of: Int.self) { group in
for i in 1...5 {
group.addTask { return i * 2 }
}
for await result in group {
print(result)
}
}
withTaskGroup — используется когда дочерние задачи не выбрасывают ошибки; результаты собираются безопасно без обработки ошибокwithThrowingTaskGroup — используется когда дочерние задачи могут выбросить ошибки; требует try и стандартной обработки ошибок через do-catchtry await withThrowingTaskGroup(of: Int.self) { group in
group.addTask { try await fetchData() }
for try await result in group {
print(result)
}
}
withThrowingTaskGroup, остальные задачи отменяютсяИспользуй группы задач когда нужно запустить динамическое количество параллельных операций и агрегировать их результаты — например, загрузить несколько сетевых ресурсов параллельно.
Группы задач требуют знания точного количества дочерних задач на этапе компиляции, что делает их непригодными для сценариев с динамически определяемым количеством задач.
Новый — ещё не проверен сообществом
Вы