Странное ведение журнала HttpClient по завершению запроса задолго до завершения GetAsync - PullRequest
0 голосов
/ 15 февраля 2019

Я делаю несколько HTTP-запросов к REST API, который возвращает довольно много данных (около 100 МБ).Теперь я использовал HttpClientFactory из .Net Core для получения данных, и он работает нормально.Но что меня озадачило, так это несоответствие моего времени и внутреннего времени, которое исходит из самой библиотеки.

Вот пример сообщения из библиотеки:

Завершить обработку HTTP-запроса после130311.0094ms - ОК

Дело в том, что действительно требуется 20-30 секунд, чтобы действительно загрузить все данные, даже если библиотека написала, что все закончено (выполнить метод client.GetAsync()).

Я предполагаю, что здесь происходит то, что библиотека очень хочет сообщать сразу после получения заголовка, не дожидаясь загрузки тела.

Это действительно звучит как ошибка, но я не уверен, что это так.Может быть, у кого-то есть лучшее объяснение, почему это происходит?

PS Вот пример моего кода:

Stopwatch watch = new Stopwatch();
watch.Start();
var response = await Client.GetAsync(url);
watch.Stop();
Console.WriteLine($"Elapsed time {watch.ElapsedMilliseconds} ms");

Истекшее время в моем журнале намного выше, чем в системном сообщении

PPS Я попытался запустить с HttpCompletionOption.ResponseContentRead, но это действительно не изменило результат, это все еще большая разница.

1 Ответ

0 голосов
/ 19 февраля 2019

Похоже, именно так работает промежуточное ПО в HttpClient, которое используется каркасом журналирования.По какой-то причине загрузка тела происходит вне конвейера, поэтому регистрация всегда происходит сразу после получения заголовков.

Подробнее в этом вопросе на github.

...