A coroutine can pause work and later continue from the suspended state.

lifecycle state This example models coroutine lifecycle labels without creating real coroutine objects.

Suspended State

requested
suspended_state.lua
Replay: real traced execution (multi-file project)
local requested = "start"
local state = "suspended"

if requested == "resume" then
  state = "running"
elseif requested == "pause" then
  state = "suspended"
end

print("requested=" .. requested)
print("state=" .. state)
local requested = "pause"
local state = "suspended"

if requested == "resume" then
  state = "running"
elseif requested == "pause" then
  state = "suspended"
end

print("requested=" .. requested)
print("state=" .. state)
local requested = "resume"
local state = "suspended"

if requested == "resume" then
  state = "running"
elseif requested == "pause" then
  state = "suspended"
end

print("requested=" .. requested)
print("state=" .. state)
  1. requested ← start, state ← suspended

    1local requested→ start = "start" --@requested="pause", "resume"2local state→ suspended = "suspended"34if requested == "resume" then5  state = "running"6elseif requested == "pause" then7  state = "suspended"8end910print("requested=" .. requestedstart)11print("state=" .. statesuspended)
    outputrequested=start
    state=suspended
  1. requested ← pause, state ← suspended

    1local requested→ pause = "pause"2local state→ suspended = "suspended"
  2. state ← suspended

    5  state = "running"6elseif requestedpause == "pause" then7  state→ suspended = "suspended"8end
  3. print("requested=" .. requested)

    10print("requested=" .. requestedpause)11print("state=" .. statesuspended)
    outputrequested=pause
    state=suspended
  1. requested ← resume, state ← suspended

    1local requested→ resume = "resume"2local state→ suspended = "suspended"
  2. state ← running

    4if requestedresume == "resume" then5  state→ running = "running"6elseif requested == "pause" then
  3. print("requested=" .. requested)

    10print("requested=" .. requestedresume)11print("state=" .. staterunning)
    outputrequested=resume
    state=running