Lua не является языком сценариев с многопоточностью. Он не имеет понятия, что несколько вещей могут происходить одновременно (вы можете иметь несколько независимых Lua состояний, выполняющихся в разных потоках, но они разные Lua состояния. Если вы хотите, чтобы они были Если вы можете говорить друг с другом, то вам нужно предоставить средства для этого вручную).
Таким образом, сопрограмма Lua - это просто функция, которая может приостановить выполнение, возвращая некоторое количество значения функции, которая вызвала сопрограмму. Затем пользователь может возобновить сопрограмму, что позволит ему в дальнейшем выполнить некоторую задачу. Это совместная многозадачность; задача приостанавливает выполнение только тогда, когда она выбирает . Это в отличие от упреждающей многозадачности, где задача может просто прекратить выполнение или выполнение параллельно с чем-то другим.
Учитывая это, идея «ожидания» сопрограммы или группы сопрограмм просто не не имеет смысла. Вы возобновляете сопрограмму, когда хотите, чтобы она выполнялась дальше; это не пассивное действие.
Вы, конечно, можете создать список сопрограмм и возобновлять каждую по очереди, пока все они не прекратятся. Но для этого нет стандартной библиотечной функции Lua, потому что она обычно бесполезна для использования сопрограмм.