.NET HttpClient は API 呼び出しを並列化し、ランダムに例外をスローします: 既存の接続がリモート ホストによって強制的に閉じられました。コンテンツをストリームにコピー中にエラーが発生しました。
リモート サービス: Springboot。
クライアント環境: .NET Framework 4.8、コンソール アプリ。
問題はランダムにスローされましたが、設定されている場合
httpClient.DefaultRequestHeaders.ConnectionClose = true;
問題は解消されましたが、1 回の通話のパフォーマンスが低下し、TCP 接続を活用できません。この問題を解決するには?libレベルのバグのようです。
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);
}