Sobes.tech
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()