Menu
Coddy logo textTech

Verificando o status da corrotina

Parte da seção Lógica e Fluxo 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 coroutine como argumento e retorna uma string que descreve seu estado atual. Há três 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 sua 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 do seu ciclo de vida.

Crie uma coroutine que produz um valor uma vez e depois é concluída. Verifique e registre seu status após a criação, após a primeira retomada (quando estiver pausada em yield) e após as retomadas subsequentes com base em resumeCount.

Lógica:

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

Parâmetros:

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

Retorna: Uma string mostrando o status da coroutine em três pontos do seu ciclo de vida (string). Formato: initial: suspended\nafter first resume: suspended\nfinal: 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 Lógica e Fluxo

Pratique por conta própria: Compilador de Lua online