.NET HttpClient 并行 API 调用并随机抛出异常:现有连接被远程主机强行关闭。将内容复制到流时出错。
远程服务:Springboot。
客户端环境:.NET Framework 4.8,控制台应用程序。
问题是随机抛出的,但如果设置
httpClient.DefaultRequestHeaders.ConnectionClose = true;
问题消失了,但单次调用性能下降,无法利用 TCP 连接。如何解决这个问题?这似乎是一个库级别的错误。
static void Main(string[] args)
{
RunTask().GetAwaiter().GetResult();
}
public async static Task RunTask()
{
HttpClient client = new HttpClient();
for (int j = 0; j < 50; j++)
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 30; i++)
{
tasks.Add(LoadAsync(client));
}
await Task.WhenAll(tasks);
tasks.ForEach(t => t.GetAwaiter().GetResult());
}
}
public async static Task<string> LoadAsync(HttpClient httpClient)
{
return await httpClient.GetStringAsync(API_URL);
}