От чего зависит упадет ли корутина

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

Ответ

Корутина может упасть из-за необработанного исключения внутри её блока кода. Основные причины:

  • Неотловленные исключения (Exception или RuntimeException)
  • Отмена родительской корутины (если CoroutineExceptionHandler не установлен)
  • Ошибки в async-блоке, если не вызван await()

Пример:

val scope = CoroutineScope(Job() + Dispatchers.IO)  
scope.launch {  
    throw RuntimeException("Oops!") // Упадёт, если нет обработчика  
}  

// Без await() исключение потеряется  
val deferred = scope.async { error("Fail") }  

Как предотвратить:

  • Использовать try/catch внутри корутин
  • Устанавливать CoroutineExceptionHandler
  • Всегда вызывать await() для async