Sobes.tech
Middle

Qu'est-ce que la fonction 'suspend' en Kotlin?

sobes.tech IA

Réponse de l'IA

La fonction suspend est une fonction qui peut être suspendue (suspend) et reprise (resume) ultérieurement. Elles constituent une partie fondamentale des coroutines en Kotlin et sont utilisées pour effectuer des opérations asynchrones sans bloquer le thread.

Caractéristiques clés :

  • Ne peut être appelée que depuis une autre fonction suspend ou depuis le contexte d'une coroutine. Le compilateur garantit cette restriction.
  • Ne bloque pas le thread. Lorsqu'une opération asynchrone est effectuée (par exemple, une requête réseau), la fonction suspend suspend l'exécution de la coroutine, libérant le thread pour d'autres tâches. Lorsque l'opération asynchrone est terminée, la coroutine reprend là où elle s'était arrêtée.
  • Utilisée pour le parallélisme structuré. En combinaison avec des fonctions comme launch et async de la bibliothèque kotlinx.coroutines, elle permet d'écrire du code asynchrone de manière séquentielle et facile à lire.
  • Le compilateur transforme les fonctions suspend en automates finis. Cela permet de conserver l'état de la coroutine entre les points de suspension.

Exemple :

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulation d'une opération asynchrone (par exemple, une requête réseau)
    delay(1000) // points de suspension
    return "Données chargées"
}

fun main() = runBlocking {
    println("Commence le chargement...")
    val data = fetchData() // Appel de la fonction suspend
    println(data)
    println("Chargement terminé")
}

Ici, fetchData est une fonction suspend qui utilise delay (une autre fonction suspend) pour simuler un délai. delay est un point de suspension. runBlocking crée un contexte de coroutine pour exécuter main comme un thread bloquant, mais à l'intérieur, fetchData s'exécute de manière non bloquante.