Junior — Middle
Czym różni się SupervisorJob od zwykłego Job w kontekście korutyn i zarządzania zadaniami?
sobes.tech AI
Odpowiedź od AI
W Kotlinie Job w korutynach reprezentuje zadanie, które może zostać anulowane i jest śledzone w hierarchii korutyn. SupervisorJob to specjalny typ Job, który różni się zachowaniem w przypadku wyjątków w korutynach potomnych.
Główna różnica:
- Job: Jeśli jedna z korutyn potomnych zakończy się błędem, ten błąd anuluje cały nadrzędny
Jobi wszystkie pozostałe korutyny potomne. - SupervisorJob: Błąd w jednej korutynie potomnej nie anuluje innych korutyn potomnych ani nadrzędnego
Job. Pozwala to na izolację błędów i kontynuację wykonywania innych zadań.
Przykład:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
launch {
// Ta korutyna zakończy się wyjątkiem
throw Exception("Błąd w korutynie potomnej")
}
launch {
// Ta korutyna będzie kontynuować pracę, mimo błędu w innej
delay(1000)
println("Kontynuacja wykonania")
}
}
Użycie SupervisorJob jest wygodne, gdy chcesz, aby awaria jednego zadania nie wpływała na wykonanie innych równoległych zadań.