Sobes.tech
Junior — Middle

Kaip vykdomas klaidų tvarkymas CoroutineScope ribose Kotlin?

sobes.tech AI

Atsakymas iš AI

Kotlin'e CoroutineScope viduje klaidų tvarkymas vyksta naudojant išimčių mechanizmus ir specialius klaidų tvarkytojus.

Pagrindiniai būdai:

  1. try-catch viduje korutinos Korutinos kodą galima apgaubti try-catch bloku, kad būtų galima tvarkyti vietinius išimtis.
launch {
    try {
        // kodas, kuris gali išmesti išimtį
    } catch (e: Exception) {
        // klaidos tvarkymas
    }
}
  1. CoroutineExceptionHandler Tai specialus tvarkytojas, kurį galima perduoti į korutinos kontekstą, kad būtų galima globaliai tvarkyti neapdorotas išimtis, paleistas per launch (bet ne async).
val handler = CoroutineExceptionHandler { _, exception ->
    println("Pagauta $exception")
}

val scope = CoroutineScope(Dispatchers.Main + handler)
scope.launch {
    throw RuntimeException("Klaida")
}
  1. Klaidų tvarkymas async Async atveju, išimtys nėra išmetamos iš karto, o tik kai kviečiama await(), todėl klaidų tvarkymas turi būti ten.
val deferred = async {
    throw RuntimeException("Klaida")
}
try {
    deferred.await()
} catch (e: Exception) {
    // tvarkymas
}

Taigi, metodo pasirinkimas priklauso nuo korutinos tipo ir norimo klaidų tvarkymo lygio.