Sobes.tech
Junior — Middle

Aký je rozdiel medzi SupervisorJob a bežným Job v kontexte korutín a správy úloh?

sobes.tech AI

Odpoveď od AI

V Kotlinu Job v korutinách predstavuje úlohu, ktorú je možné zrušiť a ktorá je sledovaná v hierarchii korutín. SupervisorJob je špeciálny typ Job, ktorý sa odlišuje v správaní pri výnimkách v deťoch korutín.

Hlavný rozdiel:

  • Job: Ak jedna z detských korutín skončí s chybou, táto chyba zruší celý rodičovský Job a všetky ostatné detské korutiny.
  • SupervisorJob: Chyba v jednej deťskej korutíne nezruší ostatné detské korutiny ani rodičovský Job. To umožňuje izolovať chyby a pokračovať v vykonávaní iných úloh.

Príklad:

val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)

scope.launch {
    launch {
        // Táto korutina zlyhá s výnimkou
        throw Exception("Chyba v deťskej korutíne")
    }
    launch {
        // Táto korutina bude pokračovať v práci, napriek chybe v inej
        delay(1000)
        println("Pokračovanie vykonávania")
    }
}

Použitie SupervisorJob je vhodné, keď chcete, aby zlyhanie jednej úlohy neovplyvnilo vykonávanie iných paralelných úloh.