Junior — Middle
Qual é a diferença entre SupervisorJob e um Job normal no contexto de coroutines e gestão de tarefas?
sobes.tech IA
Resposta da IA
No Kotlin, Job nas corrotinas representa uma tarefa que pode ser cancelada e é rastreada na hierarquia de corrotinas. SupervisorJob é um tipo especial de Job que se diferencia pelo comportamento em caso de exceções nas corrotinas filhas.
Diferença principal:
- Job: Se uma das corrotinas filhas termina com um erro, esse erro cancela todo o
Jobpai e todas as outras corrotinas filhas. - SupervisorJob: Um erro em uma corrotina filha não cancela as outras corrotinas filhas nem o
Jobpai. Isso permite isolar erros e continuar a execução de outras tarefas.
Exemplo:
val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)
scope.launch {
launch {
// Esta corrotina falhará com uma exceção
throw Exception("Erro na corrotina filha")
}
launch {
// Esta corrotina continuará funcionando, apesar do erro na outra
delay(1000)
println("A execução continua")
}
}
O uso de SupervisorJob é conveniente quando se deseja que a falha de uma tarefa não afete a execução de outras tarefas paralelas.