WebClient.DownloadFile() のタイムアウトの実装
速度が遅い、または応答しない可能性があるサーバーからファイルをダウンロードするときに無期限の遅延を防ぐには、WebClient.DownloadFile()
のタイムアウトを実装することが不可欠です。 この例は、カスタム ソリューションを示しています:
基本クラス WebDownload
を継承して派生クラス WebClient
を作成します。
<code class="language-csharp">public class WebDownload : WebClient { /// <summary> /// Timeout in milliseconds /// </summary> public int Timeout { get; set; } public WebDownload() : this(60000) { } // Default 60-second timeout public WebDownload(int timeout) { this.Timeout = timeout; } protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); if (request != null) { request.Timeout = this.Timeout; } return request; } }</code>
Timeout
プロパティはミリ秒単位で設定され、ダウンロードのタイムアウトを制御します。
使用法は簡単です。WebDownload
クラスをインスタンス化し、標準の WebClient
と同様に使用します。
<code class="language-csharp">using (WebDownload client = new WebDownload(10000)) // 10-second timeout { client.DownloadFile("http://example.com/file.zip", "file.zip"); }</code>
このアプローチにより、ファイルにアクセスできない場合やサーバーが応答しない場合でも、ダウンロード操作が無期限にハングすることがなくなり、ファイルのダウンロードに対する堅牢なソリューションが提供されます。
以上がWebClient.DownloadFile() のタイムアウトを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。