首页 > 其他 > 详细

Lua中协程的使用

时间:2016-07-04 11:30:42      阅读:146      评论:0      收藏:0      [点我收藏+]

    平常访问网络都会使用回调的方式,现在通过协程改变这种回调的模式,让异步方法按同步的方法来使用

-- co.lua
yield   = coroutine.yield
co      = function(func, cb)
    local cor = coroutine.create(func)
    local next = coroutine.resume
    local hasNext; hasNext = function(status, func, ...)
        -- suspended
        if not status then return end
        -- only function
        if type(func) == "function" then
            -- call function
            func(--[[callback]]function(...)
                hasNext(next(cor, ...))
            end)
        elseif cb then
            cb(func, ...)
        end
    end
    hasNext(next(cor))
end



-- test.lua
require("co")

-- 网络异步操作
function request(url)
    return function(next)
        ...

        next("网络返回结果")
    end
end

-- 运行一个协程方法
co(function()
    local result = yield(request("http://login.9173.com"))
    local result_json = json.decode(result)
    if result_json.ok then
        -- other code
    end
end)



这里一共使用了两个函数coyield


co接收一个函数为参数,该函数由coroutine协程去执行

yield接收一个函数为参数,传入的函数会有一个next函数类型的参数,返回值为next函数传入的值,即

local result = yield(function(next)
    next("success") -- 调用next()表示该函数运行结束,如果没有返回值直接next()即可
end)

-- result: success

Lua中协程的使用

原文:http://www.cnblogs.com/houmingamedevelop/p/5639737.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!