Heim > Backend-Entwicklung > C++ > Wie storniere ich eine Aufgabe. Wait () nach einer Auszeit?

Wie storniere ich eine Aufgabe. Wait () nach einer Auszeit?

Patricia Arquette
Freigeben: 2025-01-27 22:21:09
Original
186 Leute haben es durchsucht

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

Behandeln Sie Zeitüberschreitungen bei asynchronen Aufgaben ordnungsgemäß: Brechen Sie Task.Wait() innerhalb von 5 Sekunden ab

Die GetFinalUrl-Methode in diesem Code instanziiert programmgesteuert einen Webbrowser, navigiert zu einer URL und gibt die endgültige URL zurück, nachdem das Dokument vollständig geladen wurde. Um die Aufgabe zu stoppen, wenn das Dokument länger als 5 Sekunden geladen wird, und dafür zu sorgen, dass GetFinalUrl() null zurückgibt, können Sie die Timeout-Aufgabenmethode verwenden. Das Folgende ist der geänderte Code:

<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>
Nach dem Login kopieren

In diesem modifizierten Code wird mithilfe des CancellationTokenSource(TimeSpan)-Konstruktors ein CancellationTokenSource (timeoutCts) mit einem Timeout von 5 Sekunden erstellt. Verwenden Sie dann die Methode Wait(CancellationToken), um darauf zu warten, dass die Aufgabe innerhalb des durch CancellationToken angegebenen Zeitlimits abgeschlossen wird. Wenn die Aufgabe nicht innerhalb des Timeout-Zeitraums abgeschlossen wird, wird eine OperationCanceledException-Ausnahme ausgelöst und die GetFinalUrl-Methode gibt null zurück. Beachten Sie die hinzugefügte Nullprüfung für task.Result, um eine mögliche NullReferenceException zu vermeiden.

Auf diese Weise vermeiden wir effektiv lange Blockierungen und gehen mit potenziellen Timeout-Situationen elegant um.

Das obige ist der detaillierte Inhalt vonWie storniere ich eine Aufgabe. Wait () nach einer Auszeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage