异步函数特性小结

实现

可以使用lambda表达式来实现执行函数,区分为有无返回值表达式

boost::container::map<long, std::vector<Ratel::Deliver::Driver::DrugStatisticalInfo>> deliverInventoryMap;
    boost::function<bool()> function = [&]()->bool {
        deliverInventoryMap = _mapDeliverInventory;
        return true;
    };
    auto fut = _updateExecutor->postTask(function);
    fut.get();

这是一个有返回值,返回值为bool的lambda表达式函数。在异步执行,等到function执行完成,返回true才会继续往下执行,达到一个单独给该函数内部上锁异步执行,整体同步执行的效果。

boost::container::map<long, std::vector<Ratel::Deliver::Driver::DrugStatisticalInfo>> deliverInventoryMap;
    boost::function<void()> function = [&]()->void {
        deliverInventoryMap = _mapDeliverInventory;
    };
   _updateExecutor->postTask(function);

而第二种lambda表达式是返回值为void,也可以说是没有返回值的函数。在异步执行时,function可能由于某种原因导致并没有执行完,但是程序不会等待它的返回,因此继续往下走,导致deliverInventory Map获取有误,这个时候的容器还未被赋值,即为空的情况下继续往下走,导致后续与之相关的逻辑操作都会出现错误,无法实现代码应有的功能。达到的是一个整个程序异步执行的效果。

结论

在需要整个函数运行完成后才继续往下走的时候,不管怎样,都要给该异步函数一个返回值,让程序等待它的返回,如果不需要等待它执行,那可以使用没有返回值的异步函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值