Всем привет, необходимо реализовать асинхронный HTTP клиентик, который имея список url'ов трекеров должен вернуть первый полученный HTTP response от любого первого ответившего. Немного переписав пример из оф доки -
https://www.boost.org/doc/libs/1_76_0/doc/html/boo... и добавив туда работу с boost::future/boost::promise я написал следующий код:
https://pastebin.com/hAG2k3rd
Изменения внесенные в пример: в структуре client теперь имеется promise, у клиентского кода же есть future от него, и он, используя бустовую функцию when_any пытается получить самый быстрый и валидный фьючерс. When_any вернет вектор фьючерсов, где первый будет гарантированно готов к обработке, внутри обработчика я проверяю результат фьючерса на исключение и если оно есть, то запускаю процедуру заново, но уже с частью фьючерсов которые еще не были обработаны.
В целом он вроде как даже работает, но почему-то тормозит (именно вся программа, то есть поток main'a и поток где выполняется io_service::run застывают) на строчке под номером 228 "result.set_value(any_res->get());", и я не понимаю в чем причина такого поведения, прошу помочь разобраться! Заранее благодарю!