我使用boost::asio::spawn
启动协程
boost::asio::io_context ioc;
boost::asio::steady_timer timer(ioc);
boost::asio::ip::tcp::socket socket(ioc);
boost::asio::io_context::strand strand(ioc);
......
boost::asio::spawn(strand, [&](boost::asio::yield_context yield)
{
while(true){
http::async_write(socket, req_indicators, yield);
http::async_read(socket, buffer, res, yield);
// do something with res
timer.expires_after(interval);
timer.async_wait(yield);
}
}
......
现在,我想立即取消此协程(不等待计时器到期并检查标志),而不停止整个ioc
,因为其他协程在同一链中运行。
我可以同时调用timer.cancel()
和socket.close()
,但是随着协程变得越来越复杂,我必须跟踪所有可能导致协程产生产量的事情,这很累而且容易出错。是否有一种方法可以无条件地停止由boost::asio::spawn
创建的协程,例如python的asyncio.task.cancel()
?