boost::asio coroutine example