Coroutines pour Kotlin : guide complet avec exemples

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

Que sont les Coroutines et pourquoi en a-t-on besoin ?

\n\n

Les Coroutines (coroutines) sont un outil puissant pour la programmation asynchrone en Kotlin, qui permet d'écrire du code non bloquant dans un style impératif. Contrairement aux threads traditionnels, les coroutines sont légères : vous pouvez exécuter des milliers de coroutines sur un seul thread sans consommation mémoire significative.

\n\n

L'objectif principal des Coroutines est de simplifier le travail avec les opérations asynchrones : requêtes réseau, lecture de base de données, opérations sur fichiers et autres tâches nécessitant une attente. Au lieu d'utiliser des callbacks complexes ou des flux réactifs, vous écrivez un code séquentiel qui se suspend pendant l'attente et reprend après la fin de l'opération.

\n\n

La bibliothèque Coroutines fait partie de l'écosystème Kotlin et est officiellement supportée par JetBrains. Elle est largement utilisée dans le développement Android, les applications serveur (Ktor, Spring WebFlux) et même dans les applications desktop.

\n\n

Installation des Coroutines

\n\n

Comme les Coroutines ne sont pas une bibliothèque séparée à installer via pip ou npm, mais une partie de l'écosystème Kotlin, leur intégration dépend de votre gestionnaire de build.

\n\n

Gradle (Kotlin DSL)

\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")\n    // Pour Android ou utilisation de Dispatchers.Main\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")\n}
\n\n

Gradle (Groovy DSL)

\n
dependencies {\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0'\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'\n}
\n\n

Maven

\n
<dependency>\n    <groupId>org.jetbrains.kotlinx</groupId>\n    <artifactId>kotlinx-coroutines-core</artifactId>\n    <version>1.9.0</version>\n</dependency>
\n\n

Démarrage rapide : premier exemple

\n\n

Écrivons un programme simple qui lance une coroutine, fait une pause et affiche un message :

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    println("Début du programme : ${Thread.currentThread().name}")\n    \n    launch {\n        delay(1000L) // Suspend la coroutine pendant 1 seconde (sans bloquer le thread)\n        println("Monde ! (depuis la coroutine : ${Thread.currentThread().name})")\n    }\n    \n    println("Bonjour, (depuis main : ${Thread.currentThread().name})")\n    delay(500L) // Attend que la coroutine ait le temps de s'exécuter\n    println("Fin du programme")\n}
\n\n

Sortie :

\n
Début du programme : main @coroutine#1\nBonjour, (depuis main : @coroutine#1)\nMonde ! (depuis la coroutine : @coroutine#2)\nFin du programme
\n\n

Remarque : delay() ne bloque pas le thread, mais suspend uniquement la coroutine actuelle. Le thread main reste libre pour d'autres tâches.

\n\n

Méthodes et fonctions principales des Coroutines

\n\n

1. runBlocking

\n

Ce qu'il fait : Lance une nouvelle coroutine et bloque le thread actuel jusqu'à son achèvement. Utilisé comme pont entre le code synchrone normal et le monde des coroutines (généralement dans la fonction main ou les tests).

\n

Paramètres :

\n
    \n
  • context: CoroutineContext — contexte de la coroutine (par défaut EmptyCoroutineContext)
  • \n
  • block: suspend CoroutineScope.() -> T — bloc suspendu qui sera exécuté
  • \n
\n

Exemple :

\n
fun main() {\n    val result = runBlocking {\n        delay(1000L)\n        "Terminé !"\n    }\n    println(result) // Affiche : Terminé !\n}
\n\n

2. launch

\n

Ce qu'il fait : Lance une nouvelle coroutine qui ne retourne pas de résultat (analogue à fire-and-forget). Retourne un objet Job qui peut être utilisé pour l'annulation ou l'attente.

\n

Paramètres :

\n
    \n
  • context: CoroutineContext

Recommendations