【发布时间】: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?此外,如果您向我们提供更广泛的代码上下文,这可能会有所帮助:您打算做什么?为什么不简单地使用可用的结果而不需要额外的任务?