Вопрос проверяет умение проектировать устойчивый асинхронный код и обрабатывать сбои и зависания.
Для защиты от зависших задач используют таймауты, отмену задач и защитные механизмы.
Важно, чтобы зависшая операция не блокировала остальные.
Часто применяются таймеры, DispatchWorkItem или отмена Task.
Также важно всегда гарантировать завершение групп задач.
Зависшая асинхронная задача может заблокировать логику приложения, поэтому защита от этого должна быть предусмотрена заранее.
Можно завершить ожидание, если задача выполняется слишком долго.
group.wait(timeout: .now() + 5)
предотвращает бесконечное ожидание
позволяет реагировать на ошибку
При использовании Swift Concurrency:
let task = Task {
// асинхронная работа
}
task.cancel()
задача должна корректно реагировать на отмену
используется Task.isCancelled
leaveВажно гарантировать вызов leave.
использовать defer
обрабатывать все ветки выполнения
Дополнительная задача следит за временем выполнения.
если лимит превышен — логируется ошибка
пользователь получает fallback-сценарий
Асинхронный код всегда должен иметь защиту от зависаний. Таймауты, отмена и корректное завершение задач делают систему устойчивой и предсказуемой.