我见过 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
不知从何而来。你不能对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 */
已经开始,并且您有一个句柄来等待它们完成并获取结果。
关于c++ - 从函数返回任务有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757517/