GetAsync完成之前很长一段时间,最终请求的奇怪HttpClient日志记录

时间:2019-02-15 13:22:51

标签: c# http .net-core dotnet-httpclient httpclientfactory

我向REST API发出了一些HTTP请求,这些请求返回了很多数据(大约100 MB)。现在,我已使用.Net Core中的HttpClientFactory来获取数据,并且工作正常。但是令我感到困惑的是,我的时间和内部时间之间的差异来自库本身。

这是库中的示例消息:

  

130311.0094ms之后结束处理HTTP请求-确定

事实是:即使库已编写完所有数据(执行client.GetAsync()方法),真正下载所有数据的时间实际上还要花费20-30秒。

我认为这里发生的情况是,库非常渴望在收到标头后立即报告,而无需等待正文被下载。

这听起来确实像是个错误,但我不确定是否是错误。也许有人对为什么会这样有更好的解释?

P.S。这是我的代码示例:

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

我的日志中经过的时间比系统消息中的时间要长

我尝试使用HttpCompletionOption.ResponseContentRead运行P.P.S,但实际上并没有改变结果,仍然有很大的差异。

1 个答案:

答案 0 :(得分:0)

看来HttpClient中的中间件是如何被日志框架使用的。主体的加载是出于某种原因在管道外部进行的,因此日志记录总是在收到标头之后立即进行。

question在github上的更多详细信息。