加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c 11 – 是否有相同的packaged_task :: set_exception?

发布时间:2020-12-16 03:35:19 所属栏目:百科 来源:网络整理
导读:我的假设是packaged_task在下面有一个承诺.如果我的任务抛出异常,我该如何将其路由到相关的未来?只有一个承诺我可以调用set_exception – 我如何为packaged_task做同样的事情? 解决方法 std :: packaged_task有一个关联的std :: future对象,它将保存异常(
我的假设是packaged_task在下面有一个承诺.如果我的任务抛出异常,我该如何将其路由到相关的未来?只有一个承诺我可以调用set_exception
– 我如何为packaged_task做同样的事情?

解决方法

std :: packaged_task有一个关联的std :: future对象,它将保存异常(或任务的结果).您可以通过调用std :: packaged_task的 get_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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读