Kuidas erineb vigade käsitlemine korutinates, kasutades konstruktsiooni try/catch, CoroutineExceptionHandler kasutamisest?
sobes.tech AI
Vastus AI-lt
Kohal, Kotlinis võib vigade käsitlemine korutinates toimuda kahel viisil: kasutades try/catch korutina enda sees ja CoroutineExceptionHandler abil.
-
try/catchkorutina sees võimaldab kohalikult püüda erandeid, mis tekivad korutina koodiplokis. See on kasulik, kui soovite viga otse seal, kus see võib juhtuda, töödelda. -
CoroutineExceptionHandleron globaalne erandite käsitleja korutinatele, mis lõpevad veaga ja ei ole kohapeal püüdsid. See töötab ainultlaunch-iga käivitatud korutinatega (mis tagastavadJob), mitteasync-iga (mis tagastavadDeferred), kunaasyncnõuab selgetawait-i, et saada tulemust ja töödelda erandeid.
Näide:
val handler = CoroutineExceptionHandler { _, exception ->
println("CoroutineExceptionHandler'is püütud erand: $exception")
}
GlobalScope.launch(handler) {
try {
// Kood, mis võib visata erandi
throw RuntimeException("Viga korutinas")
} catch (e: Exception) {
println("Kohapeal püütud: $e")
}
}
Kui erand on püütud try/catch-iga, siis CoroutineExceptionHandler ei aktiveeru. Kui erand ei ole kohapeal käsitsetud, saadetakse see CoroutineExceptionHandler-ile. Nii tagab try/catch kohapealse töötlemise, samas kui CoroutineExceptionHandler on globaalne ja seda kasutatakse logimiseks või muude toimingute jaoks käsitlemata erandite korral.