Ответ
Нарушение structured concurrency приводит к нескольким критическим проблемам:
- Утечки корутин – незавершенные корутины остаются в памяти, если родительская отменена, а дочерние нет.
- Потеря исключений – исключения в дочерних корутинах могут быть проигнорированы, если не переданы родителю.
- Неконтролируемая отмена – отсутствие четкой иерархии отмены приводит к неожиданным side-эффектам.
Пример нарушения:
val scope = CoroutineScope(Dispatchers.IO)
scope.launch {
launch { // Дочерняя корутина не отменится при ошибке в родительской
delay(1000)
println("Утечка!")
}
throw RuntimeException("Ошибка!")
}
Как исправить:
Используйте coroutineScope или supervisorScope для структурированного создания дочерних корутин.