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