Sobes.tech
Junior — Middle

Quelle est la différence entre l'utilisation de fonctions asynchrones avec le mot-clé async et l'appel à launch dans le contexte de la programmation asynchrone?

sobes.tech IA

Réponse de l'IA

Le mot-clé async est utilisé pour déclarer une fonction asynchrone qui renvoie un objet de type Deferred ou Job et peut être suspendue à l'aide de fonctions suspend internes. L'appel d'une telle fonction ne la lance pas automatiquement, mais renvoie un résultat différé qui peut être obtenu avec await.

launch est une fonction qui démarre une nouvelle coroutine et commence son exécution immédiatement. Elle renvoie un objet Job, que l'on peut utiliser pour gérer le cycle de vie de la coroutine (par exemple, l'annuler).

Exemple :

suspend fun fetchData(): String {
    delay(1000)
    return "Données"
}

fun main() = runBlocking {
    // async retourne un Deferred, l'exécution commence immédiatement
    val deferred = async { fetchData() }
    println("En train de faire autre chose")
    val result = deferred.await() // attendre le résultat
    println(result)

    // launch démarre une coroutine, mais ne retourne pas de résultat
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // attendre la fin
}

En résumé :

  • async est utilisé pour lancer une opération asynchrone avec résultat.
  • launch lance une coroutine sans valeur de retour, pour des tâches en arrière-plan.
  • async retourne Deferred, launchJob.