Hoe kun je foutafhandeling scheiden tussen kind-coroutines en hun ouder-coroutine?
sobes.tech AI
Antwoord van AI
In Kotlin Coroutines wordt het concept van coroutine-hiërarchie en foutafhandeling via CoroutineExceptionHandler en SupervisorJob gebruikt om fouten tussen kind-coroutines en hun ouder-coroutine te scheiden.
Standaard, als een van de kind-coroutines een uitzondering gooit, wordt de hele hiërarchie, inclusief de ouder-coroutine en andere kinderen, geannuleerd.
Om fouten te scheiden en te voorkomen dat de ouder wordt geannuleerd bij fouten in de kinderen, wordt SupervisorJob of supervisorScope gebruikt. In dat geval veroorzaken fouten in kind-coroutines geen annulering van de ouder of andere kinderen.
Voorbeeld:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
val child1 = launch {
// Deze coroutine kan falen
throw RuntimeException("Fout in child1")
}
val child2 = launch {
// Deze coroutine blijft doorgaan
delay(1000)
println("child2 succesvol afgerond")
}
}
Hier zal de fout in child1 niet leiden tot het annuleren van child2 of de ouder-coroutine.
Fouten kunnen worden afgehandeld met CoroutineExceptionHandler of try-catch binnen coroutines.
Op deze manier wordt foutscheiding bereikt met SupervisorJob en correct foutbeheer in coroutines.