Wie unterscheidet sich die Fehlerbehandlung innerhalb von Koroutinen mit der Verwendung von try/catch im Vergleich zur Verwendung von CoroutineExceptionHandler?
sobes.tech KI
Antwort von AI
In Kotlin kann die Fehlerbehandlung in Koroutinen auf zwei Arten erfolgen: durch try/catch innerhalb der Koroutine selbst und durch CoroutineExceptionHandler.
-
try/catch innerhalb der Koroutine ermöglicht es, Ausnahmen lokal abzufangen, die im Codeblock der Koroutine auftreten. Dies ist praktisch, wenn die Fehlerbehandlung genau dort erfolgen soll, wo der Fehler auftreten kann.
-
CoroutineExceptionHandler ist ein globaler Fehlerbehandler für Koroutinen, die mit einem Fehler enden und nicht lokal abgefangen wurden. Es funktioniert nur mit Koroutinen, die mit
launchgestartet wurden (die einJobzurückgeben), nicht mitasync(die einDeferredzurückgeben), daasynceinen expliziten Aufruf vonawaiterfordert, um das Ergebnis zu erhalten und Fehler zu behandeln.
Beispiel:
val handler = CoroutineExceptionHandler { _, exception ->
println("Fangene Ausnahme im CoroutineExceptionHandler: $exception")
}
GlobalScope.launch(handler) {
try {
// Code, der eine Ausnahme auslösen kann
throw RuntimeException("Fehler innerhalb der Koroutine")
} catch (e: Exception) {
println("Lokal abgefangen: $e")
}
}
Wenn die Ausnahme in try/catch abgefangen wird, wird CoroutineExceptionHandler nicht aktiviert. Wenn die Ausnahme nicht lokal behandelt wird, gelangt sie zu CoroutineExceptionHandler. Somit sorgt try/catch für lokale Fehlerbehandlung, während CoroutineExceptionHandler global ist und für Logging oder andere Aktionen bei unbehandelten Ausnahmen dient.