Menu
Coddy logo textTech

Verificando o Status da Coroutine

Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 52 de 54.

Ao trabalhar com corrotinas, você frequentemente precisará saber em que estado uma corrotina se encontra. Ela está em execução no momento? Está pausada e aguardando para ser retomada? Ela terminou de ser executada?

Lua fornece a função coroutine.status() para responder a essas perguntas.

A função coroutine.status() recebe uma corrotina como seu argumento e retorna uma string descrevendo seu estado atual. Existem três estados possíveis:

"suspended"A corrotina está pausada em um yield() e pode ser retomada
"running"A corrotina está em execução no momento
"dead"A corrotina terminou a execução e não pode ser retomada novamente

Veja como usá-lo:

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" (pausado no yield)

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

Desafio

Fácil

Escreva uma função checkCoroutineLifecycle que recebe resumeCount e retorna uma string mostrando o status de uma coroutine em diferentes pontos de seu ciclo de vida.

Crie uma coroutine que faz um yield uma vez e depois termina. Verifique e registre seu status após a criação, após o primeiro resume (quando ela estiver pausada no yield) e após os resumes subsequentes baseados em resumeCount.

Lógica:

  • Crie uma função que faz o yield da string "paused" uma vez e depois termina
  • Envolva esta função em uma coroutine usando coroutine.create()
  • Verifique o status imediatamente após a criação usando coroutine.status()
  • Retome (resume) a coroutine uma vez e verifique seu status novamente
  • Retome a coroutine vezes adicionais com base em resumeCount - 1 (total de resumes = resumeCount)
  • Verifique o status final após todos os resumes
  • Retorne uma string com todos os três status no formato: initial: [status]\\nafter first resume: [status]\\nfinal: [status]

Parâmetros:

  • resumeCount (number): Número total de vezes para retomar a coroutine (mínimo 1)

Retorno: Uma string mostrando o status da coroutine em três pontos de seu ciclo de vida (string). Formato: initial: suspended\nafter first resume: suspended\nfinal: dead

Folha de consulta

A função coroutine.status() retorna o estado atual de uma coroutine como uma string.

Estados possíveis:

  • "suspended" - A coroutine está pausada em um yield() e pode ser retomada
  • "running" - A coroutine está sendo executada no momento
  • "dead" - A coroutine terminou a execução e não pode ser retomada

Uso:

coroutine.status(coroutine_object)

Exemplo:

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"

Experimente você mesmo

function checkCoroutineLifecycle(resumeCount)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow