从函数返回任务有什么好处?
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
施魔法。你不能对 int
、std::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 */
已经开始,您有一个句柄等待它们完成并获得结果。
我见过 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
施魔法。你不能对 int
、std::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 */
已经开始,您有一个句柄等待它们完成并获得结果。