lua之async机制

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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住的。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值