返回异步结果 - 同步案例的高效处理

Ghi*_*ita 2 c++ asynchronous future c++11

您可以拥有这样的异步API

std::future<int> GetAsync()
Run Code Online (Sandbox Code Playgroud)

有些情况下,例如您已经缓存了结果,并希望返回使用结果初始化的未来.是否有一种方法可以使用当前标准(或提议)来实现这一目标,而无需重复创建额外的std :: promise或进行额外的异步(启动策略延迟)?

编辑

还要考虑基于GetAsync()函数本地的某些状态计算结果的情况,以及如果选择在启动策略延迟时选择使用std :: async,则需要捕获可能的值

Jon*_*ely 10

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

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*/);
}
Run Code Online (Sandbox Code Playgroud)

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