Avatar ·

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

Olá! Comecei a estudar coroutines em Kotlin e fiquei confuso com duas abordagens principais. Quando escrevo código, vejo que posso iniciar uma coroutine com `launch` e depois esperar sua conclusão com `join()`. E também tem `async` com `await()`. À primeira vista, eles fazem a mesma coisa — iniciam um trabalho em segundo plano e esperam o resultado. Mas sinto que existe uma diferença, e ela é importante. Aqui está um exemplo simples, onde tento carregar dados de duas fontes e combiná-los. Com launch/join, fica assim: ```kotlin fun main() = runBlocking { var data1 = "" var data2 = "" val job1 = launch { delay(1000) // simulação de carregamento data1 = "Dados da API 1" } val job2 = launch { delay(1000) data2 = "Dados da API 2" } job1.join() job2.join() println("$data1 + $data2") // Funciona, mas não é bonito } ``` E com async/await, faço assim: ```kotlin fun main() = runBlocking { val deferred1 = async { delay(10