
Hi, I have implemented a custom service using Boost 1.67 which works mostly OK, but I have noticed it always returns success when using spawn/yield. The following simplified sample shows the problem: ------------------------------------------------ #include <boost/asio.hpp> #include <boost/asio/spawn.hpp> #include <boost/beast/core/bind_handler.hpp> #include <iostream> class Service : public boost::asio::io_context::service { public: static boost::asio::io_context::id id; typedef int implementation_type; Service(boost::asio::io_context &io_context) : boost::asio::io_context::service(io_context) {} void construct(implementation_type &) {} void destroy(implementation_type &) {} }; boost::asio::io_context::id Service::id; template <typename Service> class BasicObject : protected boost::asio::basic_io_object<Service> { public: explicit BasicObject(boost::asio::io_context &io_context) : boost::asio::basic_io_object<Service>(io_context) {} template <typename ConnectHandler> auto async_method(ConnectHandler &&handler) { BOOST_ASIO_CONNECT_HANDLER_CHECK(ConnectHandler, handler) typeCheck; boost::asio::async_completion<ConnectHandler, void(const boost::system::error_code &)> init(handler); boost::system::error_code ec = boost::asio::error::already_started; boost::asio::post( boost::beast::bind_handler(std::move(init.completion_handler), std::move(ec))); return init.result.get(); } }; int main() { boost::asio::io_context ioContext; BasicObject<Service> myObject(ioContext); #if 1 boost::asio::spawn(ioContext, [&](boost::asio::yield_context yield) { boost::system::error_code ec; myObject.async_method(yield[ec]); std::clog << ec << std::endl; }); #else myObject.async_method([](const boost::system::error_code &ec) { std::clog << ec << std::endl; }); #endif ioContext.run(); return 0; } ------------------------------------------------ The version not using spawn prints "system:114", the one using spawn prints "system:0". What am I doing wrong? Thanks.