承诺和未来,为什么主要退出成功?

时间:2015-07-18 18:05:35

标签: c++11 promise future

我开始在C ++ 11中学习承诺和未来,但在这里我被困住了:

#include<iostream>
#include<future>
using namespace std;

void func(future<int> &ref)
{
    cout << ref.get();
}

int main()
{
    promise<int> prom;
    future<int> fut = prom.get_future();
    async(launch::deferred, func, ref(fut));
    prom.set_value(100);
    cout << "Exiting" << endl;
}

我的理解是,当我们asynclaunch::deferred时,它不会启动新主题。

所以,除非ref.get()执行func功能赢得return,否则自promise设置后不会发生这种情况。

但是我的代码成功退出了。我的理解在哪里错了?

IDE:VS2013

1 个答案:

答案 0 :(得分:2)

deferred异步调用只存储可调用对象和参数。

返回 .get()上致电future之前,没有什么事情发生。

您放弃了返回future的内容,因此您对async的通话基本上是一个noop。

没有其他因素阻止main完成,所以......