有条件的std :: future和std :: async
问题描述:
我需要做条件行为。有条件的std :: future和std :: async
std::future<int> f = pointer ? std::async(&Class::method, ptr) : 0;
// ... Some code
x = f.get();
所以我想分配给ptr->method()
来电或0 x结果异步的结果,如果ptr
是nullptr
。
上面的代码是否正常?我可以做任何这样的事情吗(分配'int'到'std :: futture'?或者也许有更好的解决方案吗?
答
您可以加载一个值到未来,而无需使用像这样的线程:
std::future<int> f;
if (pointer)
f = std::async(&Class::method, ptr);
else
{
std::promise<int> p;
p.set_value(0);
f = p.get_future();
}
// ... Some code
x = f.get();
但一个更简单的方法来达到同样的目标将是:
std::future<int> f;
if (pointer)
f = std::async(&Class::method, ptr);
// ... Some code
x = f.valid() ? f.get() : 0;
答
您可以为其它情况下也返回std::future
(使用不同的策略):
std::future<int> f = pointer
? std::async(&Class::method, ptr)
: std::async(std::launch::deferred, [](){ return 0;});