在 .net 中通过设置 HttpClient 的 Timeout 属性配置请求超时时间,默认为 100 秒,可自定义为 TimeSpan 值,如 30 秒;超时会抛出 TaskCanceledException,需结合 CancellationToken 判断是否为超时异常;推荐使用 IHttpClientFactory 或静态实例避免资源耗尽,并在依赖注入中统一配置超时以提升可靠性。

在 .NET 中使用 HttpClient 设置请求超时时间,主要是通过设置 Timeout 属性来实现。这个属性控制整个请求从发送到接收到响应的最长时间,超过该时间会抛出 TaskCanceledException 异常。
设置 HttpClient 超时时间
HttpClient 的 Timeout 属性类型为 TimeSpan,默认值是 100 秒。你可以根据需要自定义这个时间。
示例如下:
var httpClient = new HttpClient(); httpClient.Timeout = TimeSpan.FromSeconds(30); // 设置超时为30秒
如果请求在 30 秒内未完成,就会触发超时异常,需在调用 GetAsync、PostAsync 等方法时进行异常处理。
处理超时异常
当请求超时时,.NET 会抛出 TaskCanceledException。注意:这个异常也可能是由于取消令牌(CancellationToken)触发的,因此建议检查是否是因超时引起。
捕获异常的示例:
try { var response = await httpClient.GetAsync("https://api.example.com/data"); response.EnsureSuccessStatusCode(); } catch (TaskCanceledException) { // 判断是否是超时导致 if (!cancellationToken.IsCancellationRequested) { // 是超时,不是手动取消 Console.WriteLine("请求超时"); } }
避免重复创建 HttpClient
频繁创建 HttpClient 实例可能导致端口耗尽等问题。推荐使用 IHttpClientFactory 或将其声明为静态实例。
使用 IHttpClientFactory 配置超时(在 Startup.cs 或 Program.cs 中):
services.AddHttpClient("timeoutClient", client => { client.Timeout = TimeSpan.FromSeconds(20); });
然后通过依赖注入获取客户端使用。
基本上就这些。设置超时很简单,关键是合理配置时间并正确处理异常。


