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

What are the benefits of returning a task from a function?

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

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

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

当异步行为可以通过任何一种方法实现时,为什么还要 return 执行任务(在第二个示例中)?

澄清:我 不是 专门询问 void return 类型。它可以是一个整数、对象或其他东西。

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 */ 已经开始,您有一个句柄等待它们完成并获得结果。