Sobes.tech
Back to questions
Junior — Middle
69

Какие подходы и методы используются для обработки ошибок в корутинах Kotlin?

Companies where asked
Спецвузавтоматика

Answer from AI

sobes.tech AI

В Kotlin для обработки ошибок в корутинах используются несколько подходов:

  1. try-catch внутри корутины — самый простой способ обработки исключений. Можно обернуть код внутри launch или async в блок try-catch.
launch {
    try {
        // код, который может выбросить исключение
    } catch (e: Exception) {
        // обработка ошибки
    }
}
  1. CoroutineExceptionHandler — специальный обработчик, который можно передать в контекст корутины. Он ловит необработанные исключения в корутинах, запущенных через launch.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Caught $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Error")
}
  1. Обработка ошибок в async/await — при использовании async исключения не выбрасываются сразу, а при вызове await(). Поэтому нужно оборачивать await() в try-catch.
val deferred = async {
    // код
    throw Exception("Error")
}

try {
    deferred.await()
} catch (e: Exception) {
    // обработка
}
  1. SupervisorJob и SupervisorScope — позволяют изолировать ошибки дочерних корутин, чтобы одна ошибка не отменяла весь родительский scope.

Таким образом, выбор метода зависит от контекста и типа корутины (launch или async).