Menu
Coddy logo textTech

Vérifier l'état d'une coroutine

Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 52 sur 54.

Lorsque vous travaillez avec des coroutines, vous aurez souvent besoin de savoir dans quel état se trouve une coroutine. Est-elle en cours d'exécution ? Est-elle en pause et en attente de reprise ? A-t-elle fini de s'exécuter ?

Lua fournit la fonction coroutine.status() pour répondre à ces questions.

La fonction coroutine.status() prend une coroutine comme argument et renvoie une chaîne décrivant son état actuel. Il existe trois états possibles :

"suspended"La coroutine est en pause à un yield() et peut être reprise
"running"La coroutine est actuellement en cours d'exécution
"dead"La coroutine a terminé son exécution et ne peut plus être reprise

Voici comment l'utiliser :

function task()
    coroutine.yield()
    print("Finishing")
end

local co = coroutine.create(task)
print(coroutine.status(co))  -- "suspended"

coroutine.resume(co)
print(coroutine.status(co))  -- "suspended" (en pause au yield)

coroutine.resume(co)
print(coroutine.status(co))  -- "dead" (terminé)
challenge icon

Défi

Facile

Écrivez une fonction checkCoroutineLifecycle qui prend resumeCount et renvoie une chaîne de caractères montrant le statut d'une coroutine à différents moments de son cycle de vie.

Créez une coroutine qui cède (yield) une fois, puis se termine. Vérifiez et enregistrez son statut après la création, après la première reprise (lorsqu'elle est en pause au yield), et après les reprises suivantes basées sur resumeCount.

Logique :

  • Créez une fonction qui cède la chaîne "paused" une fois, puis se termine
  • Enveloppez cette fonction dans une coroutine en utilisant coroutine.create()
  • Vérifiez le statut immédiatement après la création en utilisant coroutine.status()
  • Reprenez la coroutine une fois et vérifiez à nouveau son statut
  • Reprenez la coroutine des fois supplémentaires basées sur resumeCount - 1 (total des reprises = resumeCount)
  • Vérifiez le statut final après toutes les reprises
  • Renvoyez une chaîne avec les trois statuts au format : initial: [status]\\nafter first resume: [status]\\nfinal: [status]

Paramètres :

  • resumeCount (nombre) : Nombre total de fois qu'il faut reprendre la coroutine (minimum 1)

Retourne : Une chaîne montrant le statut de la coroutine à trois moments de son cycle de vie (chaîne). Format : initial: suspended\nafter first resume: suspended\nfinal: dead

Aide-mémoire

La fonction coroutine.status() renvoie l'état actuel d'une coroutine sous forme de chaîne de caractères.

États possibles :

  • "suspended" - La coroutine est en pause à un yield() et peut être reprise
  • "running" - La coroutine est actuellement en cours d'exécution
  • "dead" - La coroutine a terminé son exécution et ne peut pas être reprise

Utilisation :

coroutine.status(coroutine_object)

Exemple :

function task()
    coroutine.yield()
    print("Finishing")
end

local co = coroutine.create(task)
print(coroutine.status(co))  -- "suspended"

coroutine.resume(co)
print(coroutine.status(co))  -- "suspended"

coroutine.resume(co)
print(coroutine.status(co))  -- "dead"

Essayez vous-même

function checkCoroutineLifecycle(resumeCount)
    -- Écrire le code ici
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow