为什么在我的 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。 可能是什么原因造成的?
问题是它在尝试解析客户端的代理时挂起了很长时间。像这样初始化 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 毫秒的延迟。