.NET WebClient
オブジェクトを使用する場合、遅いサーバーから大きなファイルをダウンロードすると、タイムアウト エラーが頻繁に発生します。この記事では、タイムアウト期間を延長するための解決策を検討するか、大規模なデータセットを取得するための代替方法を提案します。
WebClient
のデフォルトのタイムアウト設定は、多くの場合、低速なネットワーク接続には不十分です。これを増やすために、WebClient
メソッドをオーバーライドし、より長いタイムアウト期間を設定するカスタム GetWebRequest
クラスを作成できます。
次のコード スニペットは、タイムアウトを 20 分に延長する方法を示しています。
<code class="language-csharp">private class MyWebClient : WebClient { protected override WebRequest GetWebRequest(Uri uri) { WebRequest w = base.GetWebRequest(uri); w.Timeout = 20 * 60 * 1000; // 20 minutes in milliseconds return w; } }</code>
このカスタム MyWebClient
クラスを使用すると、タイムアウト例外が発生することなくダウンロードを続行できます。
タイムアウトを延長することは有益ですが、真の「無限」タイムアウトは WebClient
によって直接サポートされていません。 以下にいくつかの効果的な代替案を示します:
BackgroundWorker の使用: BackgroundWorker
クラスを継承し、その DoWork
メソッドをオーバーライドすると、WebClient
タイムアウト制限をバイパスして、別のスレッド内でダウンロードが可能になります。
HttpClient の活用: HttpClient
は、WebClient
のより現代的で堅牢な代替手段であり、カスタマイズされたタイムアウト設定用の Timeout
プロパティを提供します。
Async/Await の利用: async
/await
を使用した非同期プログラミングは、メイン スレッドをブロックすることなく、ダウンロードなどの長時間実行操作を容易にします。 このアプローチは、スレッドの安全性が主な関心事ではない場合に適しています。
以上が.NET WebClient で大きなファイルのダウンロードのタイムアウト設定をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。