Ответ
Обычные исключения обрабатываются через try-catch и прерывают выполнение потока. Исключения в корутинах распространяются иерархически и могут быть обработаны через CoroutineExceptionHandler.
Ключевые отличия:
- Необработанные исключения в корутинах отменяют родительскую корутину
- Можно установить глобальный обработчик через
CoroutineExceptionHandler - В
asyncисключение выбрасывается только при вызовеawait()
Пример обработки:
val handler = CoroutineExceptionHandler { _, exception ->
println("Caught $exception")
}
scope.launch(handler) {
throw RuntimeException("Failed")
}