Sobes.tech
Junior — Middle

Como organizar a espera pela conclusão das corutinas num programa assíncrono?

sobes.tech IA

Resposta da IA

Para esperar que as corrotinas em Kotlin terminem, normalmente usa-se a função join() no objeto Job, que é retornado ao iniciar a corrotina. Se a corrotina for iniciada com launch, ela retorna um Job, e a chamada job.join() suspende o thread atual até que a corrotina termine.

Exemplo:

val job = GlobalScope.launch {
    // algum trabalho assíncrono
    delay(1000)
    println("Corrotina terminada")
}

runBlocking {
    job.join() // esperar a conclusão da corrotina
    println("A corrotina foi concluída")
}

Se usar async, para obter o resultado e esperar a conclusão da corrotina, usa-se await().

val deferred = GlobalScope.async {
    delay(1000)
    return@async 42
}

runBlocking {
    val result = deferred.await() // esperar e obter o resultado
    println("Resultado: $result")
}