Problema no ciclo de vida do asio :: io_service e thread_group

Olhando pararespostas como esta, podemos fazer coisas como:

boost::asio::io_service ioService;
boost::thread_group threadpool;
{
    boost::asio::io_service::work work(ioService);
    threadpool.create_thread(boost::bind(&boost::asio::io_service::run, ioService));
    threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
    ioService.post(boost::bind(...));
    ioService.post(boost::bind(...));
    ioService.post(boost::bind(...));
}
threadpool.join_all();

No entanto, no meu caso, quero fazer algo como:

while (condition)
{
    ioService.post(boost::bind(...));
    ioService.post(boost::bind(...));
    ioService.post(boost::bind(...));
    threadpool.join_all();

    // DO SOMETHING WITH RESULTS
}

No entanto, oboost::asio::io_service::work work(ioService) a linha está fora do lugar e, tanto quanto posso ver, não posso recriá-la sem precisar criar todos os threads no pool novamente.

No meu código, a sobrecarga de criação de threads parece insignificante (e realmente melhor desempenho que o código anterior baseado em mutex), mas existe uma maneira mais limpa de fazer isso?

questionAnswers(1)

yourAnswerToTheQuestion