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.