Sobes.tech
Junior — Middle

¿En qué se diferencia SupervisorJob de un Job normal en el contexto de las corrutinas y la gestión de tareas?

sobes.tech AI

Respuesta de la IA

En Kotlin, Job en las corrutinas representa una tarea que puede ser cancelada y se rastrea en la jerarquía de corrutinas. SupervisorJob es un tipo especial de Job que se diferencia en su comportamiento ante excepciones en las corrutinas hijas.

Diferencia principal:

  • Job: Si una de las corrutinas hijas termina con un error, este error cancela todo el Job padre y todas las demás corrutinas hijas.
  • SupervisorJob: Un error en una corrutina hija no cancela las otras corrutinas hijas ni el Job padre. Esto permite aislar errores y continuar con otras tareas.

Ejemplo:

val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)

scope.launch {
    launch {
        // Esta corrutina fallará con una excepción
        throw Exception("Error en la corrutina hija")
    }
    launch {
        // Esta corrutina continuará funcionando, a pesar del error en la otra
        delay(1000)
        println("La ejecución continúa")
    }
}

El uso de SupervisorJob es conveniente cuando se necesita que la falla de una tarea no afecte la ejecución de otras tareas paralelas.