Middle
Qual é a diferença entre launch e async/await em Kotlin?
sobes.tech IA
Resposta da IA
launch inicia uma coroutine que realiza um trabalho e não devolve resultado. Destina-se a tarefas que não requerem espera bloqueante.
async inicia uma coroutine que realiza um trabalho e devolve um resultado do tipo Deferred<T>. Para obter o resultado, usa-se await(), que suspende a coroutine atual até a conclusão da tarefa assíncrona. async/await são usados quando é necessário obter o resultado de uma operação assíncrona.
Exemplo de uso:
// launch - sem valor de retorno
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Trabalho concluído")
}
// async/await - com valor de retorno
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Resultado: $result")
}
Tabela comparativa de diferenças:
| Característica | launch | async/await |
|---|---|---|
| Tipo de retorno | Job | Deferred<T> |
| Espera | Não bloqueia (fire and forget) | Requer await() para esperar bloqueantemente o resultado |
| Uso | Para iniciar tarefas que não requerem retorno de resultado | Para tarefas cujo resultado é necessário para a lógica posterior |
| Tratamento de erros | Através de CoroutineExceptionHandler | Através de try-catch ao chamar await() |