如何简化代码避免用.then将task<int>转为task<void>(公共API不可修改)
简化
task<int>转task<void>的实现 当然可以简化这段代码,不用手动写那个空的lambda。这里有几种实用的方法:
方法1:利用PPL的内置转换逻辑
其实PPL的task<void>提供了构造函数,可以直接接受任意task<T>实例——它会自动等待原task完成并忽略返回值,不需要额外的then调用。你的代码可以直接写成:
task<void> MyClass::MyFunction1() { return MyFunction2(); }
这个写法完全合法,和你原来的then实现效果完全一致,内部已经帮你做了“丢弃返回值”的逻辑。
方法2:自定义辅助函数(增强可读性)
如果你想让代码的意图更清晰(比如明确表示“我就是要忽略返回值”),可以写一个简单的辅助函数:
template<typename T> task<void> ignore_result(task<T> t) { return t.then([](T) {}); }
然后你的函数就可以写成:
task<void> MyClass::MyFunction1() { return ignore_result(MyFunction2()); }
这种方式在团队协作中更友好,能明确表达你是有意丢弃返回值,而非不小心漏掉了处理逻辑。
补充说明
你原来的then调用本质上就是告诉PPL:“等这个task<int>完成,忽略它的返回值,生成一个task<void>”。而PPL已经内置了这个转换逻辑,所以完全不需要手动写lambda来重复实现。
内容的提问来源于stack exchange,提问作者K Mehta
相关产品推荐
相关产品推荐

