Hoe verschilt foutafhandeling binnen coroutines met behulp van try/catch van het gebruik van CoroutineExceptionHandler?
sobes.tech AI
Antwoord van AI
In Kotlin kan foutafhandeling in coroutines op twee manieren worden gedaan: via try/catch binnen de coroutine zelf en via CoroutineExceptionHandler.
-
try/catchbinnen de coroutine stelt je in staat om lokaal uitzonderingen op te vangen die in het codeblok van de coroutine optreden. Dit is handig wanneer je de fout direct daar wilt afhandelen waar deze kan voorkomen. -
CoroutineExceptionHandleris een globale foutafhandelaar voor coroutines die eindigen met een fout en niet lokaal zijn opgevangen. Het werkt alleen met coroutines die gestart zijn metlaunch(die eenJobteruggeven), en niet metasync(die eenDeferredteruggeven), omdatasynceen expliciete aanroep vanawaitvereist om het resultaat te verkrijgen en fouten te behandelen.
Voorbeeld:
val handler = CoroutineExceptionHandler { _, exception ->
println("Fout opgevangen in CoroutineExceptionHandler: $exception")
}
GlobalScope.launch(handler) {
try {
// Code die een uitzondering kan veroorzaken
throw RuntimeException("Fout binnen de coroutine")
} catch (e: Exception) {
println("Lokaal opgevangen: $e")
}
}
Als de uitzondering in try/catch wordt opgevangen, zal CoroutineExceptionHandler niet worden geactiveerd. Als de uitzondering niet lokaal wordt afgehandeld, wordt deze doorgestuurd naar CoroutineExceptionHandler. Op deze manier biedt try/catch lokale afhandeling, terwijl CoroutineExceptionHandler globaal is en wordt gebruikt voor logging of andere acties bij niet-afgehandelde uitzonderingen.