Мой код здесь:
coroutine.wrap(function()
local x = os.clock() + 3
repeat until os.clock() >= x
print("Hi")
end)()
print("Bye")
Обычно ожидаемый вывод должен быть «Пока», а затем подождать 3 секунды, чтобы напечатать «Привет». Однако сопрограмма сдалась первой и напечатала Hi before Bye.
Я сделал что-то не так в своем коде? Я новичок в сопрограммах.
Корутины — это не потоки. Они не работают одновременно; только одна сопрограмма внутри потока может выполняться одновременно. Как только вы возобновляете сопрограмму (что в основном и делает вызов обернутой сопрограммы), она работает до тех пор, пока не вернет управление обратно в исходное место, которое ожидает получения значения. Поскольку у вас нет yield
в сопрограмме, она будет выполняться до завершения при вызове. Итак, ваш код
yield
, return
или до конца (во время которого печатается "Hi"
)"Bye"
печатается