Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

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

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

GlobalScope.launch(handler) {
    throw RuntimeException("Грешка")
}
  1. Обработка на грешки в async/await — при използване на async, изключенията не се хвърлят веднага, а при извикване на await(). Затова трябва да обвиете await() в try-catch.
val deferred = async {
    // код
    throw Exception("Грешка")
}

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

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