lua之async机制

lua async

lua中的coroutine本身提供了强大的功能,但是它属于基础API,在实现复杂逻辑的过程中,需要将coroutine进行包装,或者将coroutine的句柄传来传去。
针对上面的问题,借鉴C#中task机制,现用纯lua的代码实现了一套async机制。
简单示例代码

local tempAsync = async(function()
    print(123)
    local temp = await(task)
    print(temp)
    print(2)
end)
tempAsync()

async

凡是需要异步的方法,都需要调用async方法,async方法返回一个特殊的function,我们称之为task function,其作用类似与c#中的动态编译过程。
task function返回一个内置的task用于其它的await调用。此处的async虽然是一个function,但是行为类似与c#中的关键字。

之前在lua中定义函数方式为 funciton xxx() end,之后调用xxx()即可。如果想使用async的话,需要修改为xxx = async(function() end),之后调用
xxx()或者调用await(xxx())都可以,具体调用哪一个根据是否要block/await某个行为来决定。

我们也提供了一个便捷的asyncwarper,用于直接调用使用。如asyncWraper(function() print(12) await(xxx) end)此时funciton中的内容会立刻被
调用,但是await还是会block住的。

你可能感兴趣的:(异步编程,lua,开发语言)