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
Jobpadre y todas las demás corrutinas hijas. - SupervisorJob: Un error en una corrutina hija no cancela las otras corrutinas hijas ni el
Jobpadre. 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.