C++ boost::asio::bind_executor()行为,是否有意?

C++ boost::asio::bind_executor()行为,是否有意?,c++,boost,C++,Boost,我希望在一个io_上下文中运行服务,并在另一个io_上下文中执行业务逻辑。但首先我想了解更多关于重新分派行为的信息,所以我编写了一些实验代码。这是我的第一个版本(不使用boost::asio::bind_executor()) context1没有运行,在本例中,没有作业发布到context2。所以context2.run()立即返回。当然,屏幕上没有打印任何内容 下面是使用boost::asio::bind_executor()的第二个版本 在这种情况下,进程将永远停留在context2.ru

我希望在一个io_上下文中运行服务,并在另一个io_上下文中执行业务逻辑。但首先我想了解更多关于重新分派行为的信息,所以我编写了一些实验代码。这是我的第一个版本(不使用boost::asio::bind_executor())

context1没有运行,在本例中,没有作业发布到context2。所以context2.run()立即返回。当然,屏幕上没有打印任何内容

下面是使用boost::asio::bind_executor()的第二个版本

在这种情况下,进程将永远停留在context2.run()中,等待挂起的作业交付

因此,手工编写的包装器代码和boost::asio::bind_executor()的行为不同。这是错误还是有意的?建议采用哪种方式

提前谢谢

boost::asio::io_context context1;
boost::asio::io_context context2;

// for simplicity I use post here, it will be socket operation in real code
boost::asio::post(context1, [&context2]()
    { boost::asio::post(context2, []() { printf("job finished"); }); });

// notice I didn't run context1 here
context2.run();
boost::asio::io_context context1;
boost::asio::io_context context2;

boost::asio::post(context1, boost::asio::bind_executor(context2, []()
    { printf("job finished"); }));

// notice I didn't run context1 here
context2.run();