В чем разница между обработкой обычных исключений и исключений корутин

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

Ответ

Обычные исключения обрабатываются через try-catch и прерывают выполнение потока. Исключения в корутинах распространяются иерархически и могут быть обработаны через CoroutineExceptionHandler.

Ключевые отличия:

  1. Необработанные исключения в корутинах отменяют родительскую корутину
  2. Можно установить глобальный обработчик через CoroutineExceptionHandler
  3. В async исключение выбрасывается только при вызове await()

Пример обработки:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Caught $exception")
}

scope.launch(handler) {
    throw RuntimeException("Failed")
}