兩個協程,經過resume/yield函數參數(或者return語句)向對方傳送數據,經過resume/yield函數返回值來從對方處獲取傳送數據
function coroutine_func(resume1.Args)
yield1 return resume2.Args
yield2 return resume3.Args
end
resume1() return true,yield1.Args
resume2() return true,yield2.Args
resume3() return true,coroutine_func.return
將Resume做爲一個服務A, coroutine_func做爲一個服務B
則 A傳遞數據(resume1.Args)給B, B獲取後(由函數的參數獲取),把響應數據(yield1.Args)>
A繼續傳遞數據給(resume2.Args)給B,B獲取後(由yield1.return獲取),把響應數據(yield2.A
即,A(resume)和B(yield)都是經過參數來向對方傳送數據,而經過返回值來從對方處獲取傳送
一個異步的實現方法爲
function runAsyncFunc(func,...)
local current = coroutine.running
func.callback = function() coroutine.resume(current) end
coroutine.yield --等待動做完成後經過回調函數來恢復執行
end
一個讀寫消費者的例子:
function producer()
return coroutine.create(function()
while true do
local data = io.read()
coroutine.yield(data)
end
end)
end
function consumer(p)
while true do
local status, data = coroutine.resume(p)
print(data)
end
end
consumer(producer())異步
添加 filter:函數
function filter(source)協程
return coroutine.create(function ()回調函數
for x = 1, 10 doio
local status, data = coroutine.resume(source)function
cortine.yield('from filter' .. data)coroutine
endyield
end)方法
end call
function consumer(filter)
while true do
local status, data = coroutine.resume(filter)
if not status then return end
print (data)
end
end
comsumer(filter(producer()))