Sobes.tech
Junior — Middle

V čem se liší SupervisorJob od běžného Job v kontextu coroutin a správy úloh?

sobes.tech AI

Odpověď od AI

V Kotlinu představuje Job v korutinách úkol, který lze zrušit a je sledován v hierarchii korutin. SupervisorJob je speciální typ Job, který se liší chováním při výjimkách v dětských korutinách.

Hlavní rozdíl:

  • Job: Pokud jedna z dětských korutin skončí chybou, tato chyba zruší celý nadřazený Job a všechny ostatní dětské korutiny.
  • SupervisorJob: Chyba v jedné dětské korutině nezruší ostatní dětské korutiny ani nadřazený Job. To umožňuje izolovat chyby a pokračovat v provádění dalších úkolů.

Příklad:

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

scope.launch {
    launch {
        // Tato korutina selže s výjimkou
        throw Exception("Chyba v dětské korutině")
    }
    launch {
        // Tato korutina bude pokračovat v práci, i přes chybu v jiné
        delay(1000)
        println("Pokračování provádění")
    }
}

Použití SupervisorJob je vhodné, když chcete, aby selhání jedné úlohy neovlivnilo provádění ostatních paralelních úloh.