Programmation asynchrone en Kotlin : guide complet pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Programmation asynchrone en Kotlin : guide complet pour débutants

\n\n

Les applications modernes nécessitent de plus en plus l'exécution de plusieurs tâches simultanément : chargement de données depuis le réseau, travail avec une base de données, traitement des entrées utilisateur. En langage Kotlin, on utilise pour cela la programmation asynchrone, basée sur les coroutines. C'est un outil puissant et élégant qui permet d'écrire du code non bloquant sans callbacks complexes.

\n\n

Dans cet article, nous allons aborder les bases de la programmation asynchrone en Kotlin : ce que sont les coroutines, comment utiliser launch, async et await, ainsi que les dispatchers et la gestion des erreurs. Ce contenu est destiné aux développeurs débutants déjà familiers avec les bases de la syntaxe Kotlin.

\n\n

Que sont les coroutines et pourquoi en avons-nous besoin ?

\n\n

Une coroutine est un fil d'exécution léger qui peut être suspendu et repris sans bloquer le thread principal. Contrairement aux threads traditionnels, les coroutines ne sont pas liées aux ressources système et peuvent s'exécuter dans un seul thread en basculant entre elles.

\n\n

Principaux avantages des coroutines :

\n
    \n
  • Légèreté — on peut lancer des milliers de coroutines sans consommation significative de mémoire.
  • \n
  • Suspension (suspend) — une fonction peut "geler" son exécution sans bloquer le thread.
  • \n
  • Concurrence structurée — les coroutines gèrent automatiquement leur cycle de vie.
  • \n
  • Simplicité — le code ressemble à du code synchrone, sans callbacks imbriqués.
  • \n
\n\n

Pour travailler avec les coroutines, il faut ajouter la dépendance dans build.gradle.kts :

\n\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")\n}
\n\n

Les blocs de construction principaux : launch, async et suspend

\n\n

Fonction suspend

\n\n

Toute fonction qui peut suspendre l'exécution d'une coroutine est marquée par le mot-clé suspend. Ces fonctions ne peuvent être appelées qu'à l'intérieur d'une coroutine ou d'une autre fonction suspend.

\n\n
suspend fun fetchUserData(): String {\n    delay(1000) // simulation d'un délai\n    return "User data loaded"\n}
\n\n

La fonction delay() est l'équivalent de Thread.sleep(), mais sans bloquer le thread.

\n\n

launch — lancement d'une coroutine sans résultat

\n\n

Le constructeur launch lance une nouvelle coroutine qui ne retourne pas de résultat (elle retourne un Job). Il est utilisé pour des tâches de type "lance et oublie".

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    launch {\n        println("Coroutine 1 lancée")\n        delay(1000)\n        println("Coroutine 1 terminée")\n    }\n    println("Le thread principal continue son travail")\n}
\n\n

Sortie :

\n
Le thread principal continue son travail\nCoroutine 1 lancée\nCoroutine 1 terminée
\n\n

Notez que runBlocking est utilisé uniquement dans les exemples pédagogiques ou dans les points d'entrée (par exemple dans main()). Dans les applications réelles (Android, serveur), il n'est pas nécessaire de l'utiliser.

\n\n

async et await — obtention d'un résultat

\n\n

Si une coroutine doit retourner un résultat, on utilise le constructeur async. Il retourne un objet Deferred<T> dont on peut obtenir la valeur avec await().

\n\n
fun main() = runBlocking {\n    val deferredResult: Deferred<String> = async {\n        delay(1500)\n        "Résultat des calculs"\n    }\n\n    println("Attente du résultat...")\n    val result = deferredResult.await()\n    println("Résultat obtenu : $result")\n}
\n\n

Sortie :

\n
Attente du résultat...\nRésultat obtenu : Résultat des calculs
\n\n

Avec async, on peut lancer plusieurs tâches parallèles :

\n\n


                
                

Blogs

Book Recommendations