在阅读coroutine2我的文档时,我发现了一段很好的代码片段,展示了如何使用它asio
这里的参考是文档中的代码:
void session(boost::asio::io_service& io_service){
// construct TCP-socket from io_service
boost::asio::ip::tcp::socket socket(io_service);
try{
for(;;){
// local data-buffer
char data[max_length];
boost::system::error_code ec;
// read asynchronous data from socket
// execution context will be suspended until
// some bytes are read from socket
std::size_t length=socket.async_read_some(
boost::asio::buffer(data),
boost::asio::yield[ec]);
if (ec==boost::asio::error::eof)
break; //connection closed cleanly by peer
else if(ec)
throw boost::system::system_error(ec); //some other error
// write some bytes asynchronously
boost::asio::async_write(
socket,
boost::asio::buffer(data,length),
boost::asio::yield[ec]);
if (ec==boost::asio::error::eof)
break; //connection closed cleanly …Run Code Online (Sandbox Code Playgroud) Boost :: Coroutine2和CoroutineTS(C ++ 20)是C ++中流行的协程实现。两者都暂停和恢复,但是两种实现遵循完全不同的方法。
协程TS(C ++ 20)
generator<int> Generate()
{
co_yield;
});
Run Code Online (Sandbox Code Playgroud)
boost ::协程2
pull_type source([](push_type& sink)
{
sink();
});
Run Code Online (Sandbox Code Playgroud)
是否有任何我只应选择其中一种的特定用例?