LUA协程和C#协程非常相似,功能与用法更强大。基础用法:
coco = coroutine.create(function (a,b) print("resume args:"..a..","..b) local arg1, arg2 = coroutine.yield(222, 333, 444) --第一次调用resume()时执行到此句就返回了,没有执行=赋值操作 --第二次执行resume()操作时,从=号开始继续执行剩余代码,且此时新的调用参数(21,11111)从=号传出给了arg1, arg2 --除了=号传参这一点外,其余都基本与c#协程相同,都是一种基于代码片段切分的执行 print ("yield return :".. arg1 .."," .. arg2) end) print(coroutine.resume(coco,0,1)) print(coroutine.resume(coco,21, 11111)) --输出如下: --~ resume args:0,1 --~ true 222 333 444 --~ yield return :21,11111 --~ true
一个典型的例子:生产者-消费者模式
count = 10 productor = coroutine.create( function () i = 0 while(true) do i = i+1 coroutine.yield(i) end end ) consumer = coroutine.create( function(co) n = 1 while(n<count) do _, v = coroutine.resume(co) print(v) n = n+1 end end ) coroutine.resume(consumer, productor)