Какие знаешь проблемы при нарушении Structured concurrency

«Какие знаешь проблемы при нарушении Structured concurrency» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нарушение structured concurrency приводит к нескольким критическим проблемам:

  1. Утечки корутин – незавершенные корутины остаются в памяти, если родительская отменена, а дочерние нет.
  2. Потеря исключений – исключения в дочерних корутинах могут быть проигнорированы, если не переданы родителю.
  3. Неконтролируемая отмена – отсутствие четкой иерархии отмены приводит к неожиданным side-эффектам.

Пример нарушения:

val scope = CoroutineScope(Dispatchers.IO)
scope.launch {
    launch { // Дочерняя корутина не отменится при ошибке в родительской
        delay(1000)
        println("Утечка!")
    }
    throw RuntimeException("Ошибка!")
}

Как исправить:
Используйте coroutineScope или supervisorScope для структурированного создания дочерних корутин.