Avatar ·

Qual é a diferença entre launch/join e async/await em coroutines Kotlin?

Olá a todos! Comecei a estudar coroutines em Kotlin e fiquei confuso com duas abordagens: launch/join e async/await. Parece que ambas permitem executar tarefas em paralelo e aguardar sua conclusão, mas não entendo quando usar cada uma. Tenho um exemplo simples: preciso baixar dois arquivos e combiná-los. Tentei ambas as formas, mas os resultados são diferentes. Primeira forma com 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") } ``` Segunda forma com 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()}") } ```