Sobes.tech
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 Job parent et toutes les autres coroutines enfants.
  • SupervisorJob : Une erreur dans une coroutine enfant n'annule pas les autres coroutines enfants ni le Job parent. 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.