C++ 为什么C++;20';什么是协同处理?

C++ 为什么C++;20';什么是协同处理?,c++,api,c++-coroutine,C++,Api,C++ Coroutine,摘自: 当控件从进程末尾流出时,协程状态被破坏 对象的协同程序或销毁成员函数(18.11.2.4) 与此相关的类型std::experimental::coroutine_handle 调用协同程序。在后一种情况下,对象具有自动 在挂起点范围内的存储持续时间将被销毁 按与结构相反的顺序。存储 通过调用非数组解除分配来释放协同路由状态 功能(3.7.4.2)。如果为协同程序调用destroy,则 挂起,程序具有未定义的行为 我的问题是: 既然协同程序状态将在执行流离开协同程序时自动销毁,为什么在c

摘自:

当控件从进程末尾流出时,协程状态被破坏 对象的协同程序或销毁成员函数(18.11.2.4) 与此相关的类型std::experimental::coroutine_handle

调用协同程序。在后一种情况下,对象具有自动 在挂起点范围内的存储持续时间将被销毁 按与结构相反的顺序。存储 通过调用非数组解除分配来释放协同路由状态 功能(3.7.4.2)。如果为协同程序调用destroy,则 挂起,程序具有未定义的行为

我的问题是:


既然协同程序状态将在执行流离开协同程序时自动销毁,为什么在
coroutine\u handle
中提供了显式函数
destroy()

也许您不想继续执行协同程序,您想提前取消其执行?在这种情况下,您可以只
co\u返回一些东西,将自动销毁协同程序上下文。似乎没有必要显式地调用
destroy()
co\u return
从协同程序的“内部”使用,
destroy
从“外部”使用。如果您有一个挂起的协同程序,什么更简单:只需调用
销毁
,或者设置一个标志并恢复协同程序,并希望它能很快检查该标志,以便执行
协同返回
?在某些用例中,您可能希望立即结束协同程序,而不是让它自己继续结束。换句话说,它的存在使得可恢复对象可以在执行co_return之前超出范围时使用它来释放与协同路由句柄相关的内存。