如果从std :: async获取的std :: future具有临时对象 生命周期(不移动或绑定到变量),析构函数 std :: future将在完整表达式结束时阻塞,直到 异步操作完成,本质上是代码,如 跟随同步:
std::async(std::launch::async, []{ f(); }); // temporary's dtor waits for f()
std::async(std::launch::async, []{ g(); }); // does not start until f() completes
但是当我尝试使用VC ++时:
void fasync(char ch)
{
for (int i = 0; i < 10; ++i)
{
this_thread::sleep_for(chrono::milliseconds(100));
cout << ch << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
async(launch::async, [] { fasync('+'); });
async(launch::async, [] { fasync('*'); });
this_thread::sleep_for(chrono::milliseconds(2000));
return 0;
}
我有这样的东西
+ * + *
* +
* +
* + * +
+ *
+ *
+ *
+ *
看起来没有人等待fasync('+')?
首先我认为这是因为睡眠而改变了fasync
for (int i = 0; i < 10; ++i)
{
cout << ch << endl;
}
cin.get();
但是再次输出交错。
编辑:根据T.C.提供的链接。这是VS 2013的一个已知错误。