作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习std::async
,并遇到了broken_promise
异常。
但是,以下示例代码似乎并没有引起 promise 异常。
我的理解是,当 promise 被破坏而 future 仍在等待时,应该抛出异常。但是,在我的代码中,对future.get()
的调用将永远等待。
lambda完成后,是否应该不调用promise的析构函数并抛出异常?
int main()
{
std::promise<int> prom;
std::future<int> fut = prom.get_future();
auto retFut = std::async(std::launch::async, [prom = std::move(prom)] () mutable {
cout << "In child" << endl;
//prom.set_value(4); <-- Shouldn't not having this line cause the exception
});
int childValue = fut.get();
cout << "Child has set the value: " << childValue << endl;
return 0;
}
void DoSomething(std::future<int>&& fut)
{
cout << "Waiting for parent to send a value " << endl;
int val = fut.get();
cout << "Parent sent value " << val << endl;
}
int main()
{
std::promise<int> prom;
std::future<int> fut = prom.get_future();
auto retFut = std::async(std::launch::async, DoSomething, std::move(fut));
// prom.set_value(3); <-- This should cause the exception?
return 0;
}
最佳答案
主要问题是等待错误的 future 。
你在等
int childValue = fut.get();
int childValue = retFut.get();
std::async
是C++最好避免的一部分。实际上,它很少交付,在复杂的项目中,最好使用某种任务池,例如
cpp-taskflow
。
关于c++ - C++ broken_promise异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62238337/
我是一名优秀的程序员,十分优秀!