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.