Coroutine Kotlin

Temps : 30 min.
Diffiulté : *

L'objectif est de mettre en pratique le concept de coroutine en Kotlin :

  1. Coroutine à la plage
  2. Coroutine
  3. Coroutine à retour

1. Coroutine à la plage

Importer kotlinx

Il s'agit d'importer la bibliothèque kotlinx dans le projet.

  1. Depuis le menu IntelliJ, ouvrez Project Structure...
  2. Dans la page Modules, placez vous sur l'onglet Dependencies
  3. Cliquez sur le bouton +
  4. Choisissez Library > From Maven
  5.   
      org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.3
      
      
  6. Vérifiez la version sur github.com: Kotlin/kotlinx.coroutines
  7. Cochez Transitive dependencies et Sources
  8. Après avoir cliqué sur Ok, les dépendances devraient se charger dans le projet

Lancer une Coroutine

Il s'agit de lancer un traitement simple en tâche de fond.

  1. Dans le package agua.crab, créez un nouveau fichier Kotlin, Race
  2. Dans le fichier Race.kt, créez une coroutine dans un main :
  3.   
      fun main() = runBlocking { // this: CoroutineScope
          launch { // lance une coroutine et continue
              delay(1000L) // non-blocking: delais d'1 second (default time unit is ms)
              println("Arrived at the beach.") // affichage
          }
          println("Hermit crabs are going to the beach, see you there!") // coroutine principale continue alors que la précédente est en retard
      }
      
      
  4. Les importations devraient se faire automatiquement via (alt + Entrée) :
  5.   
      import kotlinx.coroutines.delay
      import kotlinx.coroutines.launch
      import kotlinx.coroutines.runBlocking
      
      
  6. Exécutez votre programme

2. Coroutine

Il s'agit de créer une fonction coroutine via le mot clé suspend.

  1. Dans le fichier Race.kt, créez une fonction coroutine :
  2.   
      suspend fun goToTheBeach() {
        delay(1000L)
        println("Arrived at the beach.")
      }
      
      
  3. Appelez là dans le main :
  4.   
      fun main() = runBlocking { // this: CoroutineScope
            launch {
                goToTheBeach()
            }
            println("Hermit crabs are going to the beach, see you there!") // coroutine principale continue alors que la précédente est en retard
      }
      
      
  5. Exécutez votre programme

3. Coroutine à retour

Il s'agit de lancer une coroutine avec le mot clé async et de traiter son résultat avec await.

  1. Dans le main du fichier Race.kt, stocker une coroutine async dans une variable :
  2.   
      val a = async {
        goToTheBeach()
        true
      }
      
      
  3. Lancez une autre coroutine lorsque cette dernière est terminée et renvoie true :
  4.   
      if (a.await()) {
        launch {
          goToTheBeach()
        }
      }
      
      
  5. Exécutez votre programme

Référence

kotlinlang.org: Coroutines basics
kotlinlang.org: Coroutines async await
Wikipédia: Coroutine