Sobes.tech
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.