Sobes.tech
Junior — Middle

Jak zakończenie podrzędnej korutyny wpłynie na zakres nadrzędny w operacjach asynchronicznych?

sobes.tech AI

Odpowiedź od AI

W Kotlin Coroutines, coroutine potomna dziedziczy kontekst rodzica, w tym jego scope. Jeśli coroutine potomna zakończy się błędem, domyślnie ten błąd jest propagowany w górę i anuluje scope rodzica wraz ze wszystkimi jego coroutine potomnymi. Zapewnia to strukturalną konkurencję i zapobiega wyciekom zasobów.

Jeśli coroutine potomna zakończy się pomyślnie, nie ma to żadnego wpływu na scope rodzica — on nadal działa.

Przykład:

val parentJob = CoroutineScope(Dispatchers.Default).launch {
    val child = launch {
        throw Exception("Błąd w coroutine potomnej")
    }
    child.join()
}

// parentJob również zostanie anulowany z powodu błędu w child

Aby uniknąć anulowania rodzica przy błędach coroutine potomnych, można użyć SupervisorJob, który izoluje błędy coroutine potomnych.