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:
- 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
}
}
- 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")
}
- 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.