我看过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 */
开始执行此操作后,您将有一个句柄等待它们完成并获取结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句