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

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

本文关键字:什么 任务 函数 返回      更新时间:2023-10-16

我见过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、对象或其他东西。

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