Quelle est la différence entre launch/join et async/await dans les coroutines Kotlin ?
Bonjour ! J'ai commencé à étudier les coroutines en Kotlin et je me suis perdu entre les deux approches principales. Quand j'écris du code, je vois qu'on peut lancer une coroutine via `launch`, puis attendre sa fin avec `join()`. Et il y a aussi `async` avec `await()`. À première vue, ils font la même chose — lancer un travail en arrière-plan et attendre le résultat. Mais je sens qu'il y a une différence, et qu'elle est importante.
Voici un exemple simple où j'essaie de charger des données depuis deux sources et de les combiner. Avec launch/join, j'obtiens ceci :
```kotlin
fun main() = runBlocking {
var data1 = ""
var data2 = ""
val job1 = launch {
delay(1000) // simulation de chargement
data1 = "Données de l'API 1"
}
val job2 = launch {
delay(1000)
data2 = "Données de l'API 2"
}
job1.join()
job2.join()
println("$data1 + $data2") // Ça marche, mais ce n'est pas joli
}
```
Et avec async/await, je fais ceci :
```kotlin
fun main() = runBlocking {
val deferred1 = async {
delay(10