Sobes.tech
Junior — Middle

¿En qué se diferencia el uso de funciones asíncronas con la palabra clave async del llamada a launch en el contexto de la programación asíncrona?

sobes.tech AI

Respuesta de la IA

La palabra clave async se usa para declarar una función asíncrona que devuelve un objeto de tipo Deferred o Job y puede ser suspendida mediante funciones suspend internas. La llamada a dicha función no la ejecuta automáticamente, sino que devuelve un resultado diferido que se puede obtener con await.

launch es una función que inicia una nueva coroutine y comienza su ejecución inmediatamente. Devuelve un objeto Job, que se puede usar para gestionar el ciclo de vida de la coroutine (por ejemplo, cancelarla).

Ejemplo:

suspend fun fetchData(): String {
    delay(1000)
    return "Data"
}

fun main() = runBlocking {
    // async devuelve un Deferred, la ejecución comienza inmediatamente
    val deferred = async { fetchData() }
    println("Haciendo otra tarea")
    val result = deferred.await() // esperamos el resultado
    println(result)

    // launch inicia una coroutine, pero no devuelve un resultado
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // esperamos a que termine
}

En resumen:

  • async se usa para iniciar una operación asíncrona con resultado de retorno.
  • launch inicia una coroutine sin valor de retorno, para tareas en segundo plano.
  • async devuelve Deferred, launchJob.