作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的假设是packaged_task
在下面有一个promise
。如果我的任务抛出异常,如何将其路由到关联的future
?只需输入promise
,我就可以称为set_exception
-如何对packaged_task
做同样的事情?
最佳答案
std::packaged_task
具有关联的std::future
对象,该对象将保存异常(或任务的结果)。您可以通过调用get_future()
的 std::packaged_task
成员函数来检索该将来。
这意味着用throw
与打包的任务相关联的函数中的异常足以使该异常被任务的将来捕获(并在对future对象调用get()
时将其重新抛出)。
例如:
#include <thread>
#include <future>
#include <iostream>
int main()
{
std::packaged_task<void()> pt([] () {
std::cout << "Hello, ";
throw 42; // <== Just throw an exception...
});
// Retrieve the associated future...
auto f = pt.get_future();
// Start the task (here, in a separate thread)
std::thread t(std::move(pt));
try
{
// This will throw the exception originally thrown inside the
// packaged task's function...
f.get();
}
catch (int e)
{
// ...and here we have that exception
std::cout << e;
}
t.join();
}
关于c++11 - 是否有一个packaged_task::set_exception等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344663/
尝试编译以下代码时出现错误: #include #include int _tmain(int argc, _TCHAR* argv[]) { boost::promise pr;
假设我有一个调用不稳定的第三方服务的方法,所以我为这个调用添加了一个超时时间,比如 10 秒。这是我尝试过的: int process() { std::promise promise;
我在几个地方找到了关于如何使用 promise 的引用 copy_exception,但我在当前的 FDIS 中找不到它。自从那些博客以来,是否有关于如何使用 set_exception() 的替代方
我是一名优秀的程序员,十分优秀!