Junior — Middle
Wie behandelt man Ausnahmen beim Starten von Koroutinen mit try/catch, außerhalb der launch-Funktion platziert?
sobes.tech KI
Antwort von AI
In Kotlin können Ausnahmen, die innerhalb von Koroutinen auftreten, nicht mit einem normalen try/catch abgefangen werden, wenn sie außerhalb der Funktion launch platziert sind, da launch die Koroutine asynchron startet und sofort ein Job-Objekt zurückgibt, und Ausnahmen bereits in einem anderen Kontext auftreten.
Um Ausnahmen zu behandeln, muss man innerhalb der Koroutine Handler verwenden oder spezielle Mechanismen:
- Verwendung von
CoroutineExceptionHandlerbeim Erstellen des Koroutinen-Kontexts. - Behandlung der Ausnahmen innerhalb der Koroutine mit try/catch.
- Für mit
asyncgestartete Koroutinen kann die Ausnahme beim Aufruf vonawait()abgefangen werden.
Beispiel mit CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Abgefangene Ausnahme: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Fehler in der Koroutine")
}
job.join()
Daher funktioniert try/catch außerhalb von launch nicht, man muss sie innerhalb der Koroutine abfangen oder CoroutineExceptionHandler verwenden.