从函数返回任务有什么好处?

时间:2018-04-10 15:26:45

标签: c++ task c++-cx ppl

我见过create_task有几种使用方式:

void Bob()
{
    create_task() { /* do stuff */ }.then([](){ /* do more stuff */ });
}

task<void> Bob()
{
    return create_task() { /* do stuff */ }.then([](){ /* do more stuff */ });
}

为什么在使用任何一种方法都可以实现异步行为时,还是要回复任务(在第二个例子中)?

澄清:我专门询问void返回类型。它可以是int,object或其他东西。

1 个答案:

答案 0 :(得分:3)

void / task<void>在这里是一个特殊情况,因为你可以从无处魔法void。对于intstd::string或类似内容,您无法做同样的事情。

void Bob()
{
    create_task() { /* do stuff */ }.then([](){ /* do more stuff */ });
}

此操作返回/* do stuff */并且/* do more stuff */已经开始,并且任何有关其进度的句柄都将被丢弃。

task<void> Bob()
{
    return create_task() { /* do stuff */ }.then([](){ /* do more stuff */ });
}

此操作返回/* do stuff */并且/* do more stuff */已经启动,并且您有一个等待它们完成的句柄。

int Alice()
{
    return create_task() { /* do stuff */ }.then([](){ /* do more stuff */ return 42; }).get();
}

此操作返回/* do stuff *//* do more stuff */ 已完成,最终结果可用。

task<int> Alice()
{
    return create_task() { /* do stuff */ }.then([](){ /* do more stuff */ return 42; });
}

此操作返回/* do stuff */并且/* do more stuff */已经启动,并且您有一个等待它们完成的句柄,并获得结果。