高效处理同步案例

你可以有一个像这样的异步API

std::future<int> GetAsync()

有些情况下,例如,您已经将结果缓存起来,并希望返回使用结果初始化的将来。 有没有现行的标准(或提案)的方式来实现这一点,而无需重复创建额外的std :: promise或进行额外的异步(使用推迟策略)?

编辑

考虑结果是基于GetAsync()函数的本地状态计算的结果,以及在某些情况下,如果选择使用std :: async并且启动策略被推迟


我显然误解了一些事情,为什么你不能这样做:

std::future<int> GetAsync()
{
  if (/*already got result*/)
  {
    std::promise<int> p;
    p.set_value(/*result*/);
    return p.get_future();
  }  
  return std::async(/*whatever is needed*/);
}

创造一个承诺有什么问题? 如果你想从未来得到一个结果(一个异步返回对象),你需要一个异步提供者,一个promise就是这样一种类型。


有期货和承诺的是他们是为多线程使用而设计的。 所以如果你想返回一个未来的对象,你需要通过std::async调用, std::packaged_task<>或者std::promise<>来创建它。 如果是这种情况@ ronag的答案是一个打击。

如果这不是一般情况,并且你只想返回一个间接值到你的值,你可以使用一个std::function来进行直接计算,或者一个缓存机制,或者一个Expected<T>值来处理错误,比如期货确实; 所以你不会支付线程通信费用。

链接地址: http://www.djcxy.com/p/30741.html

上一篇: efficient handling of synchronous case

下一篇: What is std::promise?