我看过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或其他东西。

最佳答案

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 */已启动,并且您有一个句柄等待它们完成并获取结果。

关于c++ - 从函数返回任务有什么好处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49757517/

10-12 21:34