我正在使用 HttpClient 向外部 api 异步发出许多请求。我等待所有请求完成,然后在其他代码中使用响应。我的问题是,如果我发出太多请求,当我使用 Task.WhenAll 等待时,我的代码会引发异常。
该代码最终将并行运行,这意味着我将同时执行多组异步请求(即 10 组 200 个异步请求)。我已经实例化了一个与 .NET 4.5 async/await 修饰符一起使用的 HttpClient,如下所示:
using (var client = new HttpClient())
{
// make a list of tasks
List<Task<HttpResponseMessage>> taskList;
List<MyData> replies;
for (int i = 0; i < MAX_NUMBER_REQUESTS; i++)
{
taskList.Add(client.GetAsync(externalUri);
}
List<HttpResponseMessage> responses = await Task.WhenAll(taskList);
// read each response after they have returned
foreach (var response in responses)
{
var reader = new System.IO.StreamReader(await response.Content.ReadAsStreamAsync());
replies.Add(JsonConvert.DeserializeObject<MyData>(reader.ReadToEnd()));
reader.Close();
}
foreach (var reply in replies)
{
// do something with the response from the external api call...
}
}
我不断收到 TaskCanceledException。经过研究后,我发现这可能是一个超时问题。我不知道如何解决它。在使用 Task.WhenAll 并重复之前,我尝试将我的请求批量处理为 100 个请求,这有效。然后,当我并行运行三组 100 个请求时,失败了。我错过了什么吗,有人对此有任何见解吗?
Adjust ServicePointManager.DefaultConnectionLimit。对于海量并发请求,只需设置为int.MaxValue
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)