我在网上试图找到co_await操作符做了什么,但我仍然无法理解.我想以下代码:
co_await foo();
暂停协程直到foo完成,但在这种情况下它与简单地调用foo的区别如下:
foo();
这也将暂停当前函数,直到foo完成.请解释一下.
最佳答案 简而言之
如果函数包含至少一个co_await运算符,则整个函数将转换为协程.它的所有范围变量,包括参数都存储在堆上,而不是堆栈.这使得可以在不丢失状态的情况下暂停功能,并在需要时恢复.函数(协同程序)也会在第一个暂停时返回给调用者,并在第一个“返回值”语句中完成.因为它返回未完成,返回类型必须来自“awaitable types”系列,例如std :: future(c允许你创建自己的等待类型 – 它真棒!),因此调用者可以在函数完成时订阅/ co_await .
重要的是要注意:
暂停的功能可以随时恢复和完成,任何线程都取决于实现.
在您的示例中,当您编写“co_await Foo()”时,只有在Foo()完成后才会到达下一行,并且此行可能在另一个线程中执行,但写入“Foo()”将会到达当Foo()仅在同一个线程中挂起时,下一行,你将不会有任何关于Foo()完成的反馈.