🚀 async let или TaskGroup: выбираем по числу задач
🧵 Правило простое: посчитай задачи. async let — когда их фиксированное, известное на этапе компиляции количество. Две-три параллельные загрузки, ждём всё разом, минимум церемоний. TaskGroup — когда количество приходит из данных: цикл по массиву, результаты забираем по мере готовности, есть cancelAll(), ранний выход и троттлинг.
⚠️ Уточнение, которое часто перевирают: «если одна задача бросила ошибку, вторая отменится автоматически» — не совсем так. Отмена случается при выходе из скоупа (любом, включая throw), и она кооперативная: дочерняя задача продолжит работать, пока сама не проверит отмену.
💡 С Swift 6.1 (SE-0442) можно не писать of: — но вывод типа идёт сверху вниз, поэтому первым обращением к group должен быть addTask, и все дочерние задачи должны возвращать один тип.