0

我向 REST API 发出一些 HTTP 请求,返回大量数据(大约 100 MB)。我现在使用HttpClientFactory.Net Core 来获取数据,它工作正常。但令我困惑的是,我的时间安排与图书馆本身的内部时间安排之间存在差异。

这是来自库的示例消息:

在 130311.0094ms 后结束处理 HTTP 请求 - OK

问题是:真正下载所有数据确实需要 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但它确实没有改变结果,它仍然有很大的不同。

4

1 回答 1

0

似乎这就是HttpClient日志框架使用的中间件的工作方式。由于某种原因,主体的加载发生在管道之外,因此日志记录总是在收到标头后立即发生。

github上这个问题的更多细节。

于 2019-02-19T11:15:36.270 回答