Класс<coroutine>обеспечивает поддержку стековых корутин. Корутины без стека позволяют программам реализовывать асинхронную логику синхронно, с минимальными накладными расходами, как показано в следующем примере:
struct session : boost::asio::coroutine
{
  boost::shared_ptr<tcp::socket> socket_;
  boost::shared_ptr<std::vector<char> > buffer_;
  session(boost::shared_ptr<tcp::socket> socket)
    : socket_(socket),
      buffer_(new std::vector<char>(1024))
  {
  }
  void operator()(boost::system::error_code ec = boost::system::error_code(), std::size_t n = 0)
  {
    if (!ec) reenter (this)
    {
      for (;;)
      {
        yield socket_->async_read_some(boost::asio::buffer(*buffer_), *this);
        yield boost::asio::async_write(*socket_, boost::asio::buffer(*buffer_, n), *this);
      }
    }
  }
};
Класс<coroutine>используется в сочетании с псевдоключевыми словами<reenter>,<yield>и<fork>. Они являются препроцессорными макросами и реализуются в виде<switch>заявления с использованием метода, аналогичного устройству Даффа. В документации класса<coroutine>приводится полное описание этих псевдоключевых слов.
coroutine,HTTP Server 4 example,Stackful Coroutines.