Sobes.tech
Junior — Middle

Как се извършва обработката на грешки в рамките на CoroutineScope в Kotlin?

sobes.tech AI

Отговор от AI

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

Основни начини:

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

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

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