Sobes.tech
Junior — Middle

Explique as diferenças entre as funções launch, async e runBlocking no contexto das coroutines Kotlin.

sobes.tech IA

Resposta da IA

Em Kotlin, as corrotinas permitem escrever código assíncrono de forma mais simples. Aqui estão as diferenças entre launch, async e runBlocking:

  • launch — inicia uma nova corrotina que é executada em paralelo, mas não retorna resultado. Usado para tarefas em segundo plano onde o resultado não é necessário.

  • async — inicia uma corrotina que retorna um Deferred<T>, ou seja, uma promessa de resultado. Permite obter o resultado através de await(). Usado quando é necessário obter o resultado de uma operação assíncrona.

  • runBlocking — bloqueia a thread atual até que a corrotina termine. Geralmente usado na função main ou em testes para lançar corrotinas a partir de código síncrono.

Exemplo:

fun main() = runBlocking {
    launch {
        println("Corrotina sem resultado iniciada")
    }

    val deferred = async {
        delay(1000)
        return@async "Resultado"
    }

    println("Aguardando resultado: ${deferred.await()}")
}

Aqui, runBlocking inicia as corrotinas e espera que elas terminem, launch inicia uma tarefa sem resultado, async com resultado.