Junior — Middle
Wat is het verschil tussen SupervisorJob en een gewone Job in de context van coroutines en taakbeheer?
sobes.tech AI
Antwoord van AI
In Kotlin vertegenwoordigt Job in coroutines een taak die kan worden geannuleerd en wordt gevolgd in de hiërarchie van coroutines. SupervisorJob is een speciaal type Job dat zich onderscheidt in gedrag bij uitzonderingen in kind-coroutines.
Belangrijkste verschil:
- Job: Als een van de kind-coroutines eindigt met een fout, annuleert deze fout de hele ouderlijke
Joben alle andere kind-coroutines. - SupervisorJob: Een fout in een kind-coroutine annuleert niet de andere kind-coroutines of de ouderlijke
Job. Dit maakt het mogelijk om fouten te isoleren en door te gaan met andere taken.
Voorbeeld:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
launch {
// Deze coroutine faalt met een uitzondering
throw Exception("Fout in kind-coroutine")
}
launch {
// Deze coroutine blijft werken, ondanks de fout in de andere
delay(1000)
println("Voortzetting van uitvoering")
}
}
Het gebruik van SupervisorJob is handig wanneer je wilt dat het falen van één taak de uitvoering van andere parallelle taken niet beïnvloedt.