Частые ошибки: data race на class state, обновление UI не с MainActor, retain cycles в Task, игнор cancellation, избыточный Task.detached, блокировка потока внутри async.
Разбор
- Не вызывайте
Thread.sleep / тяжёлый sync I/O в async без offload.
- Не полагайтесь на «GCD привычки» без изоляции.
await не гарантирует тот же поток после возобновления (кроме акторов).
- Строгий concurrency checker ловит много проблем заранее.
Итог
Безопасность concurrency = изоляция + Sendable + отмена + UI на MainActor.