c++ - 在设置值之前是否必须调用 promise.get_future() ?

标签 c++ promise future

来自 http://www.cplusplus.com/reference/future/promise/get_future/ :

After this function has been called, the promise is expected to make its shared state ready at some point [...]

我不确定这是否意味着此操作顺序是强制性的:

  1. get_future()
  2. 设置值()

是否也有可能只有在设定值后才能从 promise 中获得 future ?

最佳答案

据我所知没有这样的限制。 std::promise::set_value 导致错误的仅有两种情况是:

  1. Promise 对象没有共享状态(这可能在移动 promise 对象时发生):

    promise<int> p;
    auto p2 = std::move(p);
    p.set_value(42); // error
    
  2. 共享状态已经存储了一个值或异常:

    promise<int> p;
    p.set_value(0);
    p.set_value(42); // error
    

    promise<int> p;
    try 
    {
        throw std::runtime_error("Some error");
    } 
    catch(...) 
    {
        p.set_exception(std::current_exception());
        p.set_value(42); // error
    }
    

但是get_future之前调用没有限制

关于c++ - 在设置值之前是否必须调用 promise.get_future() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56147196/

相关文章:

c++ - 如何将可变数量的参数传递给构造函数?

javascript - Promise 不等待超时

promise - thunk、futures 和 Promise 之间有什么区别?

Scala 重试 future 序列,直到它们全部完成

c++ - 是否有推荐的方法来测试智能指针是否为空?

java - 在 Java 中加密 (AES),在 C++ 中解密 (OpenSSL)

c++ - 为什么 float 下溢会发生在 2⁻¹²⁶ 处?

node.js - 拒绝(TypeError): Cannot read property 'setState' of undefined,未捕获( promise )TypeError:无法读取未定义的属性 'setState'

javascript - 函数中的返回语句

java - 如何在 Java 8 中多次使用 thenCompose 的结果?