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ý
Joba 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.