HttpClientの静的なインスタンスを1つ使用するとコードがハングアップし、エラーが発生して数分後に終了することがわかりました。 。静的なhttpclientを複数回呼び出すとコンソールアプリケーションがハングアップする
static HttpClient _client = new HttpClient();
static void Main(string[] args)
{
try
{
var t1 = _client.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t1.Wait();
Console.WriteLine("complete");
var t2 = _client.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t2.Wait();
Console.WriteLine("complete");
var t3 = _client.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t3.Wait();
Console.WriteLine("complete");
var t4 = _client.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t4.Wait();
Console.WriteLine("complete");
Console.ReadKey();
}
catch (System.Exception ex)
{
}
}
次のコードに切り替えて、HttpClientのインスタンスを個別に作成すると、問題はなくなります。
static void Main(string[] args)
{
try
{
HttpClient client1 = new HttpClient();
var t1 = client1.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t1.Wait();
Console.WriteLine("complete");
HttpClient client2 = new HttpClient();
var t2 = client2.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t2.Wait();
Console.WriteLine("complete");
HttpClient client3 = new HttpClient();
var t3 = client3.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t3.Wait();
Console.WriteLine("complete");
HttpClient client4 = new HttpClient();
var t4 = client4.GetStreamAsync("http://www.w3.org/TR/PNG/iso_8859-1.txt");
t4.Wait();
Console.WriteLine("complete");
Console.ReadKey();
}
catch (System.Exception ex)
{
}
}
私はなぜこれが起こっている最初に知っていただきたいと思い、私は(ちょうど好奇心から、不要)のコードの最初のブロックを持っているよう安全に静的HttpClientを複数回使用する方法がある場合
ニース。 'ConfigureAwait(false)'のアドバイスはコンソールアプリケーションでは冗長です。キャプチャして続行するSynchronizationContextがないためです。他のアプリモデルでは、しかし、それは不可欠なアドバイス、または図書館の良い練習になります。 – Stuart
あなたは正しいです!改善していただきありがとうございます。 –
最初のバリエーションは私が元々持っていたのと同じ問題に遭遇し、最初と2番目のタスクが完了してから1〜2分後にハングし、例外がスローされます。 2番目のバリエーションは完璧に機能します。私は最初のほうが 'HttpClient _client = new HttpClient())と似ていると思います。 { var t1 = _client.GetStreamAsync(" http://www.w3.org/TR/PNG/iso_8859-1.txt " ); t1.Wait(); Console.WriteLine( "complete"); } ' – erotavlas