Большой корпоративный проект. У меня есть один экземпляр io_service: ios _.
Я использую сопрограмму (boost :: asio :: spawn)
Иногда (не всегда), когда я отправляю функцию в boost :: asio :: strand из сопрограммы (!!!!) - эта функция не вызывается. На этом участке ничего нет, и нет ошибки переполнения стека.
Мой вопрос: почему функция не называется? Есть ли какая-то принципиальная раса или проблема в системных ресурсах?
boost::asio::spawn(ios_, [...] (boost::asio::yield_context asio_yield)
{
// BIG asynchronous code
boost::asio::strand strand1(ios_);
strand1.post([](){
// light code.
// sometimes we don't get here
cout << "posted to a strand"
});
});
1) Если мы выйдем из сопрограммы перед отправкой в цепочку (например, отправив в ios_) - это работает хорошо, мы всегда получаем функцию
2) если мы используем другой экземпляр boost :: asio :: io_service в boost :: asio :: spawn - он также хорошо работает
3) у нас достаточно потоков в thread_pool (12), когда мы запускаем boost :: asio :: io_service
4) используется: 1.63 буст
Единственный урок, который я усвоил: оставь сопрограмму как можно быстрее. Но мы, программа, ведем себя так - я не получил