LUA 协程

时间:2023-03-08 17:23:26
LUA 协程

LUA协程和C#协程非常相似,功能与用法更强大。基础用法:

coco = coroutine.create(function (a,b)
print("resume args:"..a..","..b)
local arg1, arg2 = coroutine.yield(, , ) --第一次调用resume()时执行到此句就返回了,没有执行=赋值操作
--第二次执行resume()操作时,从=号开始继续执行剩余代码,且此时新的调用参数(21,11111)从=号传出给了arg1, arg2
--除了=号传参这一点外,其余都基本与c#协程相同,都是一种基于代码片段切分的执行
print ("yield return :".. arg1 .."," .. arg2)
end)
print(coroutine.resume(coco,,))
print(coroutine.resume(coco,, ))
--输出如下:
--~ resume args:0,1
--~ true 222 333 444
--~ yield return :21,11111
--~ true

一个典型的例子:生产者-消费者模式

count =
productor = coroutine.create(
function ()
i =
while(true) do
i = i+
coroutine.yield(i)
end
end
) consumer = coroutine.create(
function(co)
n =
while(n<count) do
_, v = coroutine.resume(co)
print(v)
n = n+
end
end
) coroutine.resume(consumer, productor)