Junior — Middle
Qual é a diferença entre o uso de funções assíncronas com a palavra-chave async e a chamada a launch no contexto da programação assíncrona?
sobes.tech IA
Resposta da IA
A palavra-chave async é usada para declarar uma função assíncrona que devolve um objeto do tipo Deferred ou Job e pode ser suspensa com funções suspend internas. A chamada dessa função não a executa automaticamente, mas devolve um resultado diferido que pode ser obtido com await.
launch é uma função que inicia uma nova coroutine e começa a sua execução imediatamente. Ela devolve um objeto Job, que pode ser usado para gerir o ciclo de vida da coroutine (por exemplo, cancelá-la).
Exemplo:
suspend fun fetchData(): String {
delay(1000)
return "Dados"
}
fun main() = runBlocking {
// async devolve um Deferred, a execução começa imediatamente
val deferred = async { fetchData() }
println("A fazer outra coisa")
val result = deferred.await() // esperar pelo resultado
println(result)
// launch inicia uma coroutine, mas não devolve resultado
val job = launch {
val data = fetchData()
println(data)
}
job.join() // esperar pela conclusão
}
Resumindo:
asyncé usado para iniciar uma operação assíncrona com resultado de retorno.launchinicia uma coroutine sem valor de retorno, para tarefas de fundo.asyncdevolveDeferred,launch—Job.