¿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()}")
}
```