Sobes.tech
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 CoroutineExceptionHandler beim Erstellen des Koroutinen-Kontexts.
  • Behandlung der Ausnahmen innerhalb der Koroutine mit try/catch.
  • Für mit async gestartete Koroutinen kann die Ausnahme beim Aufruf von await() 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.