Avatar ·

¿Cuál es la diferencia entre launch/join y async/await en corrutinas de Kotlin?

¡Hola a todos! Empecé a estudiar corrutinas en Kotlin y me confundí con dos enfoques: launch/join y async/await. Parece que ambos permiten ejecutar tareas en paralelo y esperar a que terminen, pero no entiendo cuándo usar cada uno. Tengo un ejemplo simple: necesito descargar dos archivos y combinarlos. Probé ambos métodos, pero los resultados son diferentes. Primer método con launch/join: ```kotlin fun main() = runBlocking { var result1 = "" var result2 = "" val job1 = launch { delay(1000) result1 = "File1 content" } val job2 = launch { delay(1000) result2 = "File2 content" } job1.join() job2.join() println("$result1 $result2") } ``` Segundo método con async/await: ```kotlin fun main() = runBlocking { val deferred1 = async { delay(1000) "File1 content" } val deferred2 = async { delay(1000) "File2 content" } println("${deferred1.await()} ${deferred2.await()}") } ```