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() |