HttpClient请求持续超时排查求助:配置10秒超时却触发5秒超时异常
HttpClient请求持续超时排查求助:配置10秒超时却触发5秒超时异常
各位大佬好,我最近碰到个特别挠头的问题,想请大家帮忙排查下!我明明给HttpClient配置了10秒的超时时间,但实际运行时却总抛出5秒超时的异常,完全搞不懂哪里出了岔子。
先给大家看下具体的异常信息:
System.Threading.Tasks.TaskCanceledException' - 'The request was canceled due to the configured HttpClient.Timeout of 5 seconds elapsing
我自己核对了代码里的超时配置,是从Config.HttpRequestTimeoutMs取值的,这个配置项我明明设的是10000毫秒(也就是10秒),但异常里偏说是5秒超时,这反差实在太奇怪了。
下面是我相关的代码片段,麻烦大家帮我找找有没有疏漏:
public static async Task<Dictionary<string, ProfileManifest>> GetProfiles() { Dictionary<string, ProfileManifest> result = []; try { JsonNode node = await GetJsonFromUrl(Definition.RepoDistUrlProfileFile); foreach (var entry in node.AsObject()) { var manifest = entry.Value.Deserialize<ProfileManifest>(); if (manifest.VersionApp <= Definition.ProductVersion) result.Add(entry.Key, manifest); } } catch (Exception ex) { Logger.LogException(ex); } return result; } public static async Task<JsonNode> GetJsonFromUrl(string url) { HttpClient client = new() { Timeout = TimeSpan.FromMilliseconds(Config.HttpRequestTimeoutMs) }; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter"); Logger.Debug($"Downloading '{url}' ..."); string json = await client.GetStringAsync(url); Logger.Debug($"json received: len {json?.Length}"); return JsonSerializer.Deserialize<JsonNode>(json); }
我现在的疑惑点主要有这几个:
- 会不会是配置读取环节出了问题?比如
Config.HttpRequestTimeoutMs实际读出来的是5000而不是10000?但我明明在配置文件里设的是10000啊... - HttpClient的超时设置有没有隐藏的坑?比如我这种每次创建新HttpClient实例的方式,会不会导致超时设置不生效?
- 有没有可能是
GetStringAsync方法本身有默认超时,覆盖了我手动设置的超时时间?
真心希望有经验的大佬能帮我指点迷津,谢谢大家了!
内容来源于stack exchange
相关产品推荐
相关产品推荐

