単純な目的で使用する場合は、WebClient で十分です。Timeout がない場合、それを継承して GetWebRequest メソッドを簡単にオーバーライドできます。
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
request.Timeout = Timeout;
return request;
}
マルチスレッドで使用している場合は、コードまたは app.config で MaxConnection を設定する必要があります: Improving performance of multithreaded HttpWebRequests in .NET
簡単に並列化することもできます: .net 4.0 で Web クローラーを並列化するためのベスト プラクティス
たぶん、Microsoft は WebClient (HttpWebRequest) の実装の問題のために新しい HttpClient クラスを作成しました。
ただし、Proxy、Gzip のサポートはありません。
Web クライアントの場合:
マルチスレッドの実装では、タイムアウトの設定はまだ役に立たない!
だから質問:
プロキシ、タイムアウト (動作中のもの)、gzip をサポートする FastWebClient が必要です。複数のプロキシで使用するため、複数の FastWebClient が必要です。
またはヘルパー:
FastWebHelper.DownloadString (文字列 url、WebProxy プロキシ、int タイムアウト)
何か案が ?