ReSharper 2026.1 Help

代码检查:短生命周期的 'HttpClient'

此检查可识别在短生命周期范围(如方法内部或 using 块内)实例化 HttpClient 的情况。

虽然 HttpClient 实现了 IDisposable ,但它被设计为只实例化一次,并在整个应用程序生命周期内复用。 为每个请求创建一个新实例可能导致 套接字资源耗尽。 出现这种情况是因为即使 HttpClient 被释放,底层套接字也不会被操作系统立即释放(它们会保持在 TIME_WAIT 状态)。

public class Connection { static async Task<string> GetDataAsync0(string url) { var client = new HttpClient(); var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } }
public class Connection { private static readonly HttpClient Client = new(); static async Task<string> GetDataAsync0(string url) { var response = await Client.GetAsync(url); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } }

此检查的快速修复会将 HttpClient 实例提升为 private static readonly 字段,从而确保其在多次调用中复用。

2026年 3月 25日