LUA 协程

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)
原文地址:https://www.cnblogs.com/timeObjserver/p/6004344.html