Sobes.tech
Middle

Quelle est la différence entre launch et async/await en Kotlin ?

sobes.tech IA

Réponse de l'IA

launch lance une coroutine qui effectue un travail et ne retourne pas de résultat. Elle est conçue pour des tâches ne nécessitant pas d'attente bloquante.

async lance une coroutine qui effectue un travail et retourne un résultat de type Deferred<T>. Pour obtenir le résultat, on utilise await(), qui suspend la coroutine en cours jusqu'à la fin de la tâche asynchrone. async/await sont utilisés lorsque vous avez besoin d'obtenir le résultat d'une opération asynchrone.

Exemple d'utilisation:

// launch - sans valeur de retour
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Travail effectué")
}

// async/await - avec valeur de retour
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Résultat : $result")
}

Tableau comparatif des différences:

Fonctionnalité launch async/await
Type de retour Job Deferred<T>
Attente Ne bloque pas (fire and forget) Nécessite await() pour attendre bloquant le résultat
Utilisation Pour lancer des tâches ne nécessitant pas de retour de résultat Pour lancer des tâches dont le résultat est nécessaire pour la logique suivante
Gestion des erreurs Via CoroutineExceptionHandler Via try-catch lors de l'appel à await()