C++ asio如何生成多个协同程序,然后加入它们?
我正在使用boost::asio,我的代码如下:C++ asio如何生成多个协同程序,然后加入它们?,c++,join,yield,coroutine,asio,C++,Join,Yield,Coroutine,Asio,我正在使用boost::asio,我的代码如下: void my_coroutine(boost::asio::io_context& io, boost::asio::yield_context yield) { boost::asio::spawn(io, other_1_coroutine); boost::asio::spawn(io, other_2_coroutine); async_wait(other_1 and other
void my_coroutine(boost::asio::io_context& io, boost::asio::yield_context yield)
{
boost::asio::spawn(io, other_1_coroutine);
boost::asio::spawn(io, other_2_coroutine);
async_wait(other_1 and other_2);
continue_do_something();
}
我希望并发生成2个或更多的协同路由,然后异步等待它们。
我尝试了协同程序TS,但是g++还不支持。
如何实现这一点?当调用
spawn
函数时,作为第一个参数执行上下文传递(作为io\u上下文
类的实例)。在这个对象内部,严格地说是在io_context::run
方法内部执行协同路由函数
只要您没有使用这个io
对象来启动一些其他异步任务(因此您应该为您的协同程序创建专用的io\u上下文
实例),那么在协同程序完成之前,您只需在io\u上下文
上调用run
如果您想处理多个协程,您必须调用后台线程run
metod
boost::asio::spawn(io, other_1_coroutine);
boost::asio::spawn(io, other_2_coroutine);
// join section:
std::thread th( [&](){ io.run(); } );
io.run();
th.join();
continue_do_something();
在上面的代码中,我们通过调用run
创建了一个线程。因此,run
的两个调用同时工作,并执行两个启动的协同路由
(代码不是1:1,但它展示了如何加入协同程序)。我希望以异步、无块、无线程睡眠/线程加入的方式运行程序的所有部分。“组合异步操作”/asio::async\u initiate()正确吗?我不明白。在标题中,你们写的是“join”,问题中你们说的是“然后异步等待它们”。在通过
spawn
启动协同程序并将run
放在后台线程中之后,您可以并行执行其他代码,这不是您想要的吗?很抱歉“join”一词,我希望异步等待所有生成的协同程序,它应该是“like join”,也像python3:asyncio.wait(aws,*,loop=None,timeout=None,当=全部完成时返回)