根据并发TS,以下代码会发生什么?
auto f0 = std::async([]{return 0;});
auto f1 = f0.then([](auto& f){ return f.get() + 10; });
auto f2 = f0.then([](auto& f){ if(!f.valid()) return; return f.get() + 10;});
在执行第三行代码时,f0
已经有一个延续,因此,根据TS,f0
应该抛出异常,中止程序,UB或使用其他代码行为?我不清楚。
答案 0 :(得分:2)
根据cppreference,它是未定义的:
将延续功能附加到
*this
。如果*this
没有关联的共享状态(即valid() == false
),则该行为未定义。...
此函数返回后,
valid()
是false
。