Sobes.tech
Junior — Middle

Qual é a diferença entre as funções Job e Deferred no contexto das corutinas?

sobes.tech IA

Resposta da IA

No Kotlin, as corrotinas Job e Deferred são dois tipos de tarefas que representam operações assíncronas, mas com capacidades diferentes:

  • Job — é um tipo básico que representa uma tarefa sem resultado de retorno. Permite controlar o ciclo de vida da coroutine: iniciá-la, cancelá-la, acompanhar seu estado.

  • Deferred<T> — é uma subclasse de Job que também retorna um resultado do tipo T. É usado quando é necessário obter o resultado de uma operação assíncrona. Para obter o resultado, chama-se a função await(), que suspende a execução até que o resultado esteja pronto.

Exemplo:

val job: Job = launch {
    // realiza algum trabalho sem resultado
}

val deferred: Deferred<Int> = async {
    // realiza trabalho e retorna resultado
    42
}

runBlocking {
    deferred.await() // obtém o resultado
}

Portanto, a principal diferença é que Job não retorna resultado, enquanto Deferred sim, e permite obtê-lo através de await().