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住的。
await
可以await的只能是

这篇博客介绍了如何在Lua中实现一套类似于C#任务(Task)的async机制。通过使用coroutine并包装成task,实现了异步方法的调用。文章详细讲解了async和await的用法,并给出了内置task的创建、Task类的使用,如WhenAny、WhenAll和WaitUntil方法。还通过示例展示了如何等待task完成以及async方法的执行顺序。
最低0.47元/天 解锁文章
3017

被折叠的 条评论
为什么被折叠?



