Sobes.tech
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 Job pai e todas as outras corrotinas filhas.
  • SupervisorJob: Um erro em uma corrotina filha não cancela as outras corrotinas filhas nem o Job pai. 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.