Задержка задачи cpprestsdk pplx без причины (для меня) - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу написать клиент REST. В настоящее время я использую REST-сервер на локальном хосте. При этом предоставляются JSON отформатированные данные, с клиентом, я хочу их прочитать.

Я использую Microsoft cpprestsdk (https://github.com/microsoft/cpprestsdk/)

Это мой пример кода:

pplx::task<void> request(web::uri request_uri)
{
    http_request request(methods::GET);
    request.headers().set_content_type(L"application/json");
    request.set_request_uri(request_uri);

    return client.request(request)
    .then([](http_response response)
    {
        if (response.status_code() == status_codes::OK)
        {
            return response.extract_json();
        }
        else
        {
            return pplx::task_from_result(json::value());
        }
    }).then([](pplx::task<json::value> previousTask)
    {
        try
        {
            json::value const& value = previousTask.get();
            PrintJson(value);
        }
        catch (http_exception const& e)
        {
            std::wcout << e.what() << std::endl;
        }
    });
}

int main(int arc, char* argv[])
{
    while (true)
    {
        pplx::task<void> requ = request(web::uri(L"/getjson"));
        requ.wait();
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
    return 0;
}

Код прекрасно работает в то время как l oop, печать и чтение данных JSON снова и снова. req.wait() задерживает основной поток до получения ответа http, позже я хочу от него избавиться. (и запустить его асинхронно)

Моя проблема в том, что в среднем время запроса / ответа составляет от 30 до 100 мс, что абсолютно нормально. Но в некоторых случаях задержка становится очень длинной (до 5 минут).

Я проверил сетевой трафик c с помощью акулы провода. При возникновении ошибки было получено последнее ответное сообщение и отправлено подтверждение. Но затем каким-то образом сама задача задерживается, после этой задержки отправляется следующий запрос (http GET), а затем по истечении среднего времени запроса / ответа выполняется задача.

Ошибка возникает после неизвестный период времени. Даже если я убиваю / перезагружаю программное обеспечение в пределах задержки, задача не идет прямо.

Я предполагаю, что проблема в планировщике задач или самой ОС? Может кто знает задачи pplx?

Заранее спасибо.

PS: Я также получаю задержки с примером (bingrequest) кода cpprestsdk: https://github.com/microsoft/cpprestsdk/blob/master/Release/samples/BingRequest/bingrequest.cpp, который очень похож

...