当使用预协程 asio 接口时,我可以在当前执行上下文(主函数)中调度一个异步函数,并让它在ctx.
#include <iostream>
#include <asio.hpp>
using namespace std;
using namespace literals;
int main() {
asio::io_context ctx;
asio::steady_timer t(ctx, 2s);
asio::dispatch([&](){
cout << "inside coro before wait" << endl;
t.async_wait([](asio::error_code){
cout << "inside coro after wait" << endl;
});
});
cout << "starting ctx.run()" << endl;
ctx.run();
}
Run Code Online (Sandbox Code Playgroud)
$ ./sol
inside coro before wait
starting ctx.run()
inside coro after wait
Run Code Online (Sandbox Code Playgroud)
我想用协程复制它,asio::awaitable但dispatch不支持协程。
另一方面,co_spawn仅将协程添加到上下文中,并且不会立即启动它。
我可以使用ctx.poll()/ctx.run_one()但协程必须是唯一准备执行的协程,或者至少是第一个协程。
答案
如果我没有弄错的话,启动协程(从协程外部)的唯一方法是使用asio::co_spawn(executor, awaitable, …