Назад к вопросам
Junior — Middle
67
Как обработать исключения при запуске корутин с помощью try/catch, размещенного за пределами функции launch?
Ответ от нейросети
sobes.tech AI
В Kotlin исключения, возникающие внутри корутин, нельзя поймать обычным try/catch, если он размещён вне функции launch, потому что launch запускает корутину асинхронно и сразу возвращает объект Job, а исключения происходят уже в другом контексте.
Чтобы обработать исключения, нужно использовать обработчики внутри корутины или специальные механизмы:
- Использовать
CoroutineExceptionHandlerпри создании контекста корутины. - Обрабатывать исключения внутри самой корутины с помощью try/catch.
- Для корутин, запускаемых через
async, можно поймать исключение при вызовеawait().
Пример с CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Поймано исключение: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Ошибка в корутине")
}
job.join()
Таким образом, try/catch вне launch не сработает, нужно либо ловить внутри корутины, либо использовать CoroutineExceptionHandler.