Sobes.tech
Junior — Middle

É possível obter o resultado da execução da função launch de forma síncrona?

sobes.tech IA

Resposta da IA

A função launch no Kotlin Coroutines inicia uma nova coroutine e devolve imediatamente um objeto Job. Ela não bloqueia o thread atual e não devolve o resultado da função que inicia. Não é possível obter diretamente o resultado do launch de forma síncrona, pois o launch destina-se a iniciar tarefas que não retornam valores.

Se precisar obter o resultado de uma operação assíncrona, deve usar async, que devolve um Deferred<T>. Então pode chamar await() para obter o resultado, mas await() é uma suspensão (suspend) e não bloqueia o thread, apenas suspende a coroutine.

Exemplo:

val job = launch {
    // tarefa assíncrona
}
// job não contém resultado

val deferred = async {
    // cálculo com resultado
    42
}
runBlocking {
    val result = deferred.await() // obter resultado
    println(result) // 42
}

Assim, não é possível obter o resultado do launch de forma síncrona, para isso usa-se async + await.