Cou*_*ero 7 c++ async-await c++-coroutine
我搜索了互联网,试图找到co_await操作员的工作,但我仍然不明白。我猜下面的代码:
co_await foo();
Run Code Online (Sandbox Code Playgroud)
暂停协程直到foo完成,但是在这种情况下,它不同于简单的调用,foo例如:
foo();
Run Code Online (Sandbox Code Playgroud)
这还将暂停当前功能,直到foo完成。请给我解释一下。
Evg*_*tov 12
如果函数至少包含一个co_await运算符,则整个函数被视为协程。它的所有作用域变量(包括参数)都存储在堆上,而不是堆栈上。这使得可以暂停函数执行而不丢失其状态并在需要时恢复。此外,协程在第一次挂起时将控制权返回给调用者,并在第一个return语句上完成。由于它返回未完成,因此返回类型必须是“可等待类型”,例如std::future<int>. (C++ 允许您创建自己的可等待类型 - 这太棒了!)调用者可以co_await在函数完成时订阅/。
需要注意的是,挂起的函数可以在任何时间、任何线程上恢复和完成;细节取决于实施。
在您的示例中,当您 write 时co_await foo(),只有在完成执行后您才会到达下一行foo,并且该行可能会在另一个线程中执行,但是 write foo(), 仅当foo()仅在同一线程中挂起时才会到达下一行,并且您赢了没有任何关于其完成的反馈。