我有一个项目,它将进行一些联网,并希望将底层的Boost Beast HTTP(S)请求实现包装在期货中。
我从https://www.boost.org/doc/libs/1_69_0/libs/beast/example/http/client/async-ssl/http_client_async_ssl.cpp复制了session
类,并想将session::run()
的返回类型更改为std::future<http::response<http::string_body>>
。另外,将位置// Write the message to standard out
更改为在promise中设置结果,而不是打印。
问题是:
boost::asio::io_context ioc
放在哪里?它是否应该在我自己的应用程序的核心循环中(假设该应用程序将在其生存期内触发多个请求),然后在发出请求时将引用传递给ioc
? ioc.run()
怎么样? -我需要它不断运行,是否应该打开一个专用线程来运行ioc
以避免阻塞? session
错误?我想使用std::promise
接口,并在出现问题的情况下放置一个异常-基本上将示例中对fail()
的所有调用替换为适当的异常。但是我不能只是将异常对象放入承诺中,它期望std::exception_ptr
-我是否应该立即抛出并立即捕获并放入std::current_exception()
?对我来说这似乎是一个坏习惯。session
对象所有任务是否已完成的好方法是什么?编辑:添加了有关ioc
(粗体)的进一步问题