Sobes.tech
Назад к вопросам
Junior — Middle
69

Каким образом осуществляется обработка ошибок в рамках CoroutineScope в Kotlin?

Компании, где спрашивали
NordClan

Ответ от нейросети

sobes.tech AI

Обработка ошибок в CoroutineScope в Kotlin осуществляется с помощью механизмов исключений и специальных обработчиков ошибок.

Основные способы:

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

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

Таким образом, выбор способа зависит от типа корутины и желаемого уровня обработки ошибок.