ホームページ > バックエンド開発 > C++ > 無期限の待機を防ぐために WebClient.DownloadFile() にタイムアウトを実装するにはどうすればよいですか?

無期限の待機を防ぐために WebClient.DownloadFile() にタイムアウトを実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-11 17:36:41
オリジナル
616 人が閲覧しました

How Can I Implement Timeouts in WebClient.DownloadFile() to Prevent Indefinite Waits?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート