Junior — Middle
Wie wirkt sich das Beenden einer untergeordneten Coroutine auf den übergeordneten Scope bei asynchronen Operationen aus?
sobes.tech KI
Antwort von AI
In Kotlin Coroutines erbt die Kind-Coroutine den Kontext der Eltern-Coroutine, einschließlich ihres Scope. Wenn die Kind-Coroutine mit einem Fehler endet, wird dieser Fehler standardmäßig nach oben weitergeleitet und beendet den Scope des Elternteils zusammen mit allen seinen Kind-Coroutines. Dies gewährleistet eine strukturierte Konkurrenz und verhindert Ressourcenlecks.
Wenn die Kind-Coroutine erfolgreich endet, hat dies keinerlei Einfluss auf den Scope des Elternteils — er bleibt aktiv.
Beispiel:
val parentJob = CoroutineScope(Dispatchers.Default).launch {
val child = launch {
throw Exception("Fehler in der Kind-Coroutine")
}
child.join()
}
// parentJob wird ebenfalls wegen des Fehlers in child abgebrochen
Um die Abbruch des Elternteils bei Fehlern in Kind-Coroutines zu vermeiden, kann man SupervisorJob verwenden, der Fehler der Kind-Coroutines isoliert.