Junior — Middle
Quelle est la différence entre SupervisorJob et un Job ordinaire dans le contexte des coroutines et de la gestion des tâches?
sobes.tech IA
Réponse de l'IA
En Kotlin, Job dans les coroutines représente une tâche qui peut être annulée et est suivie dans la hiérarchie des coroutines. SupervisorJob est un type spécial de Job qui se distingue par son comportement en cas d'exceptions dans les coroutines enfants.
Différence principale:
- Job : Si l'une des coroutines enfants se termine par une erreur, cette erreur annule tout le
Jobparent et toutes les autres coroutines enfants. - SupervisorJob : Une erreur dans une coroutine enfant n'annule pas les autres coroutines enfants ni le
Jobparent. Cela permet d'isoler les erreurs et de continuer l'exécution d'autres tâches.
Exemple:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
launch {
// Cette coroutine échouera avec une exception
throw Exception("Erreur dans la coroutine enfant")
}
launch {
// Cette coroutine continuera à fonctionner, malgré l'erreur dans l'autre
delay(1000)
println("L'exécution continue")
}
}
L'utilisation de SupervisorJob est pratique lorsque vous souhaitez qu'une défaillance d'une tâche n'affecte pas l'exécution d'autres tâches parallèles.