很多项目一开始都会写出这种代码:
using var http = new HttpClient();
var text = await http.GetStringAsync(url);
它能跑,但在高并发/长期运行的服务里可能带来两个经典问题:
频繁创建/销毁 HttpClient 会导致底层连接无法复用,连接处于 TIME_WAIT,最终出现请求失败、延迟飙升。
长时间持有同一个 HttpClient 又可能导致 DNS 变更后仍走旧地址(取决于平台/Handler 配置)。
在 ASP.NET Core 里使用 IHttpClientFactory:
builder.Services.AddHttpClient();
public class MyService
{
private readonly HttpClient _http;
public MyService(IHttpClientFactory factory)
=> _http = factory.CreateClient();
}
更推荐 Typed Client:
builder.Services.AddHttpClient<GithubClient>(c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
});