Middle
¿Cuál es la diferencia entre launch y async/await en Kotlin?
sobes.tech AI
Respuesta de la IA
launch inicia una coroutine que realiza un trabajo y no devuelve un resultado. Está diseñada para tareas que no requieren esperar bloqueantemente a que finalicen.
async inicia una coroutine que realiza un trabajo y devuelve un resultado de tipo Deferred<T>. Para obtener el resultado, se usa await(), que suspende la coroutine actual hasta que la tarea asíncrona finaliza. async/await se usan cuando se necesita obtener el resultado de una operación asíncrona.
Ejemplo de uso:
// launch - sin valor de retorno
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Trabajo completado")
}
// async/await - con valor de retorno
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Resultado: $result")
}
Tabla comparativa de diferencias:
| Característica | launch | async/await |
|---|---|---|
| Tipo de retorno | Job | Deferred<T> |
| Espera | No bloquea (fire and forget) | Requiere await() para esperar bloqueantemente el resultado |
| Uso | Para iniciar tareas que no requieren devolver un resultado | Para tareas cuyo resultado es necesario para la lógica posterior |
| Manejo de errores | A través de CoroutineExceptionHandler | A través de try-catch al llamar a await() |