🧐 coroutine
Библиотека сопрограмм (coroutine
)
coroutine
)Сопрограммы реализованы в классе LuaThread. Этот класс создает управляемый поток для каждой сопрограммы. Шаги возобновления могут выполняться асинхронно.
create
Создает новую корутину. Этот метод инициализирует корутину и готовит её к выполнению.resume
Возобновляет выполнение приостановленной корутины. Если корутина завершена, этот метод не будет иметь эффекта.running
Проверяет, выполняется ли корутина в данный момент. Возвращаетtrue
, если корутина активна и не приостановлена, иfalse
в противном случае.status
Возвращает текущий статус корутины. Возможные статусы могут включать "Normal", "Running", "Suspended", "Dead".
// Coroutine is active but not running.
Normal,
// Coroutine is running.
Running,
// Coroutine currently calls yield.
Suspended,
// Coroutine has stopped.
Dead
wrap
Оборачивает корутину в другой контекст или объект, чтобы обеспечить дополнительную функциональность, такую как логирование, отслеживание времени выполнения и т.д.yield
Возвращает текущий элемент итерации, приостанавливая выполнение до следующей итерации.:BeginResume
Начинает выполнение следующей части потока.:EndResume
Ожидает завершения текущей части.
Простой пример с использованием корутины
function foo(a)
print('foo', a)
return coroutine.yield(2 * a)
end
co = coroutine.create(function ( a, b )
print('co-body', a, b)
local r = foo(a + 1)
print('co-body', r)
local r, s = coroutine.yield(a + b, a - b)
print('co-body', r, s)
return b, 'end'
end)
print(coroutine.resume(co, 1, 10))
print(coroutine.resume(co, 'r'))
print(coroutine.resume(co, 'x', 'y'))
Last updated