我使用 cpprestsdk(前卡萨布兰卡)和 Boost.Asio,我需要在等待请求完成时让步(用于其他任务)。
我用这个:
void client::make_request(boost::asio::yield_context yield)
{
http_client client;
uri = "http://example.com/uri";
auto request_task = client.request(methods::GET, uri);
boost::asio::deadline_timer yield_timer(io_service_);
while (!request_task.is_done())
{
// yield, for example for 10 ms
yield_timer.expires_from_now(default_yield_time_);
yield_timer.async_wait(yield);
}
auto response = request_task.get();
// ...
// parse response, etc.
// ...
}
有没有更优雅的方式(可悲的是对我来说并不明显:-( )在不使用 asio 计时器的情况下做到这一点?