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