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

本文关键字:HttpClient 第一个 PostAsync 调用 非常 我的 winforms 应用程序 为什么 | 更新日期: 2023-09-27 18:32:22

我有一个这样的httpclient:

var client = new HttpClient();

我像这样发布到它:

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

并得到这样的响应:

HttpResponseMessage response = result.Result;

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

我第一次运行此调用时,大约需要 2 分钟才能获得结果。 同时,如果我在其他地方做完全相同的调用,它会在 200 毫秒内完成。 即使我点击谷歌,也需要 2 分钟。 但是,在第一次通话后,只要我保持应用程序打开,任何其他通话都很好。 它只是我打开应用程序时的第一个 cal。 可能是什么原因造成的?

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

问题是它在尝试解析客户端的代理时挂起了很长时间。像这样初始化 HttpClient 可以解决问题:

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

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

在我的情况下,将localhost更改为127.0.0.1会切断 2000 毫秒的延迟,尽管第一个请求仍有可能 ~120 毫秒的延迟。