我看过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
。您无法使用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/