ホームページ > バックエンド開発 > C++ > タイムアウト後に Task.Wait() をキャンセルするにはどうすればよいですか?

タイムアウト後に Task.Wait() をキャンセルするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-27 22:21:09
オリジナル
217 人が閲覧しました

How to Cancel a Task.Wait() After a Timeout?

エレガントな処理非同期タスクタイムアウト:cancel task.wait()

このコードでは、Webブラウザーのプログラマティックメソッドでメソッドが瞬時にあり、URLに移動し、ドキュメントのロード後に最終URLを返します。ドキュメントが5秒以上ロードされているときにタスクを停止し、nullを返すために、タイムアウトタスク方法を使用できます。以下は、変更された後のコードです

この変更されたコードでは、5秒のタイムアウトで

(TimeoutCts)を作成します。次に、指定されたタイムアウト内でタスクが完了するのを待つために、メソッドを使用します。タイムアウト中にタスクが完了しない場合、GetFinalUrl異常がスローされ、GetFinalUrl()メソッドがnullを返します。 潜在的なnullReferenceExceptionを回避するために、空気チェックを追加するためにに注意してください。

このように、私たちは長期的な妨害を効果的に回避し、潜在的なタイムアウトをエレガントに処理します。
<code class="language-csharp">private Uri GetFinalUrl(PortalMerchant portalMerchant)
{
    SetBrowserFeatureControl();
    Uri finalUri = null;
    if (string.IsNullOrEmpty(portalMerchant.Url))
    {
        return null;
    }
    Uri trackingUrl = new Uri(portalMerchant.Url);
    // 创建一个超时取消令牌源
    using (var timeoutCts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
    {
        var task = MessageLoopWorker.Run(DoWorkAsync, trackingUrl, timeoutCts.Token);
        try
        {
            // 在超时时间内等待任务完成
            task.Wait(timeoutCts.Token);
            if (!String.IsNullOrEmpty(task.Result?.ToString()))
            {
                return new Uri(task.Result.ToString());
            }
        }
        catch (OperationCanceledException)
        {
            // 任务超时,返回null
            return null;
        }
    }
    throw new Exception("解析失败");
}</code>
ログイン後にコピー

以上がタイムアウト後に Task.Wait() をキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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