std :: async临时将来返回
这里是从en.cppreference.com exerpt
如果从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();
但是再次输出交织。
编辑:根据TC提供的链接,它是VS 2013的已知错误。
链接地址: http://www.djcxy.com/p/30733.html上一篇: std::async with temporary future returned
下一篇: Weird behavior with exceptions thrown from std::async, in MSVC 2015