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