🧐 coroutine

Библиотека сопрограмм (coroutine)

Сопрограммы реализованы в классе LuaThread. Этот класс создает управляемый поток для каждой сопрограммы. Шаги возобновления могут выполняться асинхронно.

  1. create Создает новую корутину. Этот метод инициализирует корутину и готовит её к выполнению.

  2. resume Возобновляет выполнение приостановленной корутины. Если корутина завершена, этот метод не будет иметь эффекта.

  3. running Проверяет, выполняется ли корутина в данный момент. Возвращает true, если корутина активна и не приостановлена, и false в противном случае.

  4. 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
  1. wrap Оборачивает корутину в другой контекст или объект, чтобы обеспечить дополнительную функциональность, такую как логирование, отслеживание времени выполнения и т.д.

  2. yield Возвращает текущий элемент итерации, приостанавливая выполнение до следующей итерации.

  3. :BeginResume Начинает выполнение следующей части потока.

  4. :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