Ответ
ExceptionHandler в корутинах — это механизм для централизованной обработки необработанных исключений. Он используется в CoroutineScope для перехвата исключений, которые не были пойманы в дочерних корутинах.
val handler = CoroutineExceptionHandler { _, exception ->
println("Caught $exception")
}
val scope = CoroutineScope(Job() + handler)
scope.launch {
throw RuntimeException("Failed!")
}
Ключевые особенности:
- Работает только для корутин, запущенных через launch (не для async)
- Должен быть установлен в контексте родительской корутины или scope
- Не перехватывает исключения, обработанные через try-catch внутри корутины
- Полезен для логирования или показа ошибок пользователю