Kako se razlikuje obrada grešaka unutar korutina korišćenjem konstrukcije try/catch od korišćenja CoroutineExceptionHandler?
sobes.tech АИ
Одговор од АИ
U Kotlinu, obrada grešaka u korutinama može se izvršiti na dva načina: putem try/catch unutar same korutine i putem CoroutineExceptionHandler.
-
try/catchunutar korutine omogućava lokalno hvatanje izuzetaka koji se javljaju u kod bloku korutine. Ovo je korisno kada želite da obradite grešku direktno tamo gde može da se dogodi. -
CoroutineExceptionHandlerje globalni upravljač izuzetaka za korutine koje se završavaju greškom i nisu lokalno uhvaćene. Radi samo sa korutinama pokrenutim salaunch(koje vraćajuJob), a ne saasync(koje vraćajuDeferred), jerasynczahteva eksplicitni pozivawaitza dobijanje rezultata i obradu izuzetaka.
Primer:
val handler = CoroutineExceptionHandler { _, exception ->
println("Uhvaćen izuzetak u CoroutineExceptionHandler: $exception")
}
GlobalScope.launch(handler) {
try {
// Kod koji može da baci izuzetak
throw RuntimeException("Greška unutar korutine")
} catch (e: Exception) {
println("Lokalno uhvaćeno: $e")
}
}
Ako je izuzetak uhvaćen u try/catch, CoroutineExceptionHandler se neće aktivirati. Ako izuzetak nije lokalno obrađen, biće prosleđen CoroutineExceptionHandler. Na ovaj način, try/catch obezbeđuje lokalnu obradu, dok je CoroutineExceptionHandler globalni i služi za logovanje ili druge radnje kod neobrađenih izuzetaka.