【问题标题】:How do I create concurrency::task from result?如何从结果创建 concurrency::task?
【发布时间】:2014-07-06 16:19:55
【问题描述】:

我想根据给定的结果创建一个已经完成的新任务。我目前的解决方法是:

return concurrency::task<T>([]{return result;});

还有什么更好的吗?

问题在于以下代码:

concurrency::task<bool> foo()
{
    if (smth)
        // the result is 
        return (foo_other() && foo_other2()).then([](std::vector<bool> results) {...});

    //return false;
    return concurrency::task<bool>([]{return false;});
}

如您所见,我的函数是异步的,它依赖于另一个异步函数。但有时我可以退出应用程序,例如如果异步任务已经完成。在这种情况下,我需要返回一个返回指定结果的 continuable 任务。

【问题讨论】:

  • 我不熟悉std::task——你是说std::packaged_task吗?
  • 使用promise 并致电set_value?
  • 我认为他在谈论 Microsoft 并行模式库 (PPL):msdn.microsoft.com/en-us/library/dd492418.aspx 但 std:: 令人困惑。
  • @Christophe 我完全不确定,OP 在说什么。 stl 已经具有误导性。如前所述,我能找到的唯一相关内容是std::packaged_task
  • @Toni Petrina,您能否澄清一下是std::packaged_task 还是concurrency::task?此外,如果您向我们提供更广泛的代码上下文,这可能会有所帮助:您打算做什么?为什么不简单地使用可用的结果而不需要额外的任务?

标签: c++ c++11 task ppl


【解决方案1】:

您可以按如下方式创建已完成的任务:

concurrency::task_from_result<bool>(false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 2018-12-16
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多