Назад к вопросам
Rutube
Junior — Middle
74
Какими методами можно реализовать обработку исключений внутри корутин в асинхронном программировании?
Компании, где спрашивали
Ubic
trendtech
Ответ от нейросети
sobes.tech AI
В Kotlin корутинах обработка исключений может быть реализована несколькими способами:
- try-catch внутри корутины — самый простой способ, когда блок кода внутри корутины оборачивается в try-catch:
launch {
try {
// асинхронный код
} catch (e: Exception) {
// обработка исключения
}
}
- CoroutineExceptionHandler — специальный обработчик исключений, который можно передать в контекст корутины. Он срабатывает на необработанные исключения в корутинах, запущенных через launch (но не async):
val handler = CoroutineExceptionHandler { _, exception ->
println("Caught $exception")
}
val job = GlobalScope.launch(handler) {
throw RuntimeException("Error")
}
- Обработка исключений в async/await — поскольку async возвращает Deferred, исключения нужно ловить при вызове await:
val deferred = async {
throw RuntimeException("Error")
}
try {
deferred.await()
} catch (e: Exception) {
// обработка
}
- SupervisorJob и SupervisorScope — позволяют изолировать ошибки дочерних корутин, чтобы одна ошибка не отменяла весь родительский scope.
Таким образом, выбор метода зависит от контекста и требований к обработке ошибок.