WebClient.DownloadFile() によるタイムアウトの処理
ファイルのダウンロードに WebClient.DownloadFile()
を使用すると、ネットワークの問題やリソースにアクセスできないため、無期限の遅延が発生する場合があります。 これを防ぐには、タイムアウト メカニズムを実装することが重要です。
カスタム WebClient クラスの作成
解決策は、WebClient
を継承するカスタム クラスを作成し、基礎となる WebRequest
のタイムアウト値を設定できるようにすることです。その方法は次のとおりです:
<code class="language-csharp">using System; using System.Net; public class TimedWebClient : WebClient { public int TimeoutMilliseconds { get; set; } public TimedWebClient() : this(60000) { } // Default timeout: 60 seconds public TimedWebClient(int timeoutMilliseconds) { TimeoutMilliseconds = timeoutMilliseconds; } protected override WebRequest GetWebRequest(Uri address) { var request = base.GetWebRequest(address); if (request != null) { request.Timeout = TimeoutMilliseconds; } return request; } }</code>
カスタム クラスの使用
このカスタム TimedWebClient
は、標準の WebClient
と同じように使用できます:
<code class="language-csharp">// Set a 30-second timeout var timedClient = new TimedWebClient(30000); // Download the file timedClient.DownloadFile("http://example.com/file.zip", "localfile.zip");</code>
このアプローチでは、指定されたタイムアウト後にファイルのダウンロードが確実に終了するため、ネットワークやアクセスの問題によってアプリケーションが無期限にハングすることがなくなります。 タイムアウトはミリ秒単位で設定されます。
以上が無期限の待機を防ぐために WebClient.DownloadFile() にタイムアウトを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。