为什么第一个 HttpClient.PostAsync 调用在我的 C# winforms 应用程序中非常慢?

Why is first HttpClient.PostAsync call extremely slow in my C# winforms app?

我有一个这样的 httpclient:

var client = new HttpClient();

我post是这样的:

var result = client.PostAsync(
                endpointUri,
                requestContent);

并得到这样的响应:

HttpResponseMessage response = result.Result;

我知道这个调用会阻塞线程,这就是它应该如何工作的(只是为我自己构建一个工具,不需要异步线程)

我第一次运行这个电话,大约需要2分钟才能得到结果。同时,如果我在其他地方进行完全相同的调用,它会在 200 毫秒内完成。即使我打google,也需要2分钟。但是,在第一次通话后,只要我让应用程序保持打开状态,任何其他通话都没有问题。当我打开应用程序时,它只是第一次校准。可能是什么原因造成的?

问题是它挂了很长时间试图为客户端解析代理。像这样初始化 HttpClient 就成功了:

var client = new HttpClient(new HttpClientHandler
            {
                UseProxy = false
            });

在我的例子中,我试图访问 localhost 上的服务。显然,HTTP 客户端在连接到其等效的 IPv4 之前首先尝试连接到 IPv6 本地主机(来源:https://github.com/jchristn/restwrapper),这会导致速度下降。

在我的例子中将 localhost 更改为 127.0.0.1 切断了 2000 毫秒的延迟,尽管第一个请求可能仍有约 120 毫秒的延迟。