Junior — Middle
Čime se SupervisorJob razlikuje od običnog Job u kontekstu korutina i upravljanja zadacima?
sobes.tech АИ
Одговор од АИ
U Kotlinu, Job u korutinama predstavlja zadatak koji može biti otkazan i koji se prati u hijerarhiji korutina. SupervisorJob je poseban tip Job koji se razlikuje u ponašanju u slučaju izuzetaka u decom korutinama.
Glavna razlika:
- Job: Ako jedna od dečjih korutina završi sa greškom, ta greška otkazuje ceo roditeljski
Jobi sve ostale dečje korutine. - SupervisorJob: Greška u jednoj dečjoj korutini ne otkazuje ostale dečje korutine niti roditeljski
Job. Ovo omogućava izolaciju grešaka i nastavak izvršavanja drugih zadataka.
Primer:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
launch {
// Ova korutina će pasti sa izuzetkom
throw Exception("Greška u dečjoj korutini")
}
launch {
// Ova korutina će nastaviti sa radom, uprkos grešci u drugoj
delay(1000)
println("Nastavak izvršavanja")
}
}
Korišćenje SupervisorJob je zgodno kada želite da neuspeh jedne zadatka ne utiče na izvršavanje drugih paralelnih zadataka.