Давайте рассмотрим следующую ситуацию.У меня есть некоторая мастер-функция, которая вызывает цепочку асинхронных операций - функция chain ().В этой цепочке я не хочу получать 10 пакетов, вызывая асинхронную обработку пакетов и снова ставя эту очередь в очередь.
void master
{
chain(10);
wait_for_chain_completion();
// Do some other work only after complition of last processor
}
void chain(int n)
{
if (n > 0)
{
socket_.async_receive(buffer, [this,n](const boost::system::error_code& error)
{
chain (--n);
boost::asio::post(io_, packet_processor);
});
}
}
После этого я не хочу возвращать контекст выполнения к главной функции.Я думаю, что такую задачу можно выполнить с помощью семафоров, но я не уверен, что такое решение подходит в моей ситуации.