Sobes.tech
Middle

Qual é a diferença entre launch e async/await em Kotlin?

sobes.tech IA

Resposta da IA

launch inicia uma coroutine que realiza um trabalho e não devolve resultado. Destina-se a tarefas que não requerem espera bloqueante.

async inicia uma coroutine que realiza um trabalho e devolve um resultado do tipo Deferred<T>. Para obter o resultado, usa-se await(), que suspende a coroutine atual até a conclusão da tarefa assíncrona. async/await são usados quando é necessário obter o resultado de uma operação assíncrona.

Exemplo de uso:

// launch - sem valor de retorno
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Trabalho concluído")
}

// async/await - com valor de retorno
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Resultado: $result")
}

Tabela comparativa de diferenças:

Característica launch async/await
Tipo de retorno Job Deferred<T>
Espera Não bloqueia (fire and forget) Requer await() para esperar bloqueantemente o resultado
Uso Para iniciar tarefas que não requerem retorno de resultado Para tarefas cujo resultado é necessário para a lógica posterior
Tratamento de erros Através de CoroutineExceptionHandler Através de try-catch ao chamar await()