0

我使用 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 计时器的情况下做到这一点?

4

1 回答 1

0

我想你想要这样的东西:

void client::make_request(boost::asio::yield_context yield)
{
    http_client client;
    uri = "http://example.com/uri";

    client.request(methods::GET, uri)
        .then([](web::http::http_response response) {
        // ...
        // parse response, etc.
        // ...
    }
}

我不确定你的屈服点。它应该是自动的。异步编程可能与我们习惯的方式不同。

于 2017-01-21T02:01:00.060 回答