| Home | Libraries | People | FAQ | More

### spawn

Start a new stackful coroutine.

    template<
        typename Handler,
        typename Function>
    void spawn(
        Handler handler,
        Function function,
        const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
      » more...

    template<
        typename Handler,
        typename Function>
    void spawn(
        basic_yield_context< Handler > ctx,
        Function function,
        const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
      » more...

    template<
        typename Function>
    void spawn(
        boost::asio::io_service::strand strand,
        Function function,
        const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
      » more...

    template<
        typename Function>
    void spawn(
        boost::asio::io_service & io_service,
        Function function,
        const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
      » more...

The `spawn()` function is a high-level wrapper over the Boost.Coroutine library. This function enables programs to implement asynchronous logic in a synchronous manner, as illustrated by the following example:

    boost::asio::spawn(my_strand, do_echo);

    // ...

    void do_echo(boost::asio::yield_context yield)
    {
      try
      {
        char data[128];
        for (;;)
        {
          std::size_t length =
            my_socket.async_read_some(
              boost::asio::buffer(data), yield);

          boost::asio::async_write(my_socket,
              boost::asio::buffer(data, length), yield);
        }
      }
      catch (std::exception& e)
      {
        // ...
      }
    }

##### Requirements

Header: `boost/asio/spawn.hpp`

Convenience header: `boost/asio.hpp`