Heim > Backend-Entwicklung > C++ > Wie storniere ich eine Aufgabe.

Wie storniere ich eine Aufgabe.

Linda Hamilton
Freigeben: 2025-01-27 22:13:10
Original
398 Leute haben es durchsucht

How to Cancel a Task.await Operation in C# After a Timeout?

Timeouts für asynchrone Operationen in C#

implementieren

asynchrone Operationen verwalten effektiv müssen häufig Zeitüberschreitungsmechanismen einbeziehen, um eine unbestimmte Blockierung zu verhindern. Dieser Artikel zeigt, wie ein Task.await -Operation in C# nach einem bestimmten Zeitlimitraum mit CancellationTokenSource.

abgesagt wird.

CancellationTokenSource Die CancellationTokenSource -Kläufe bietet einen Mechanismus zur Steuerung der Stornierung asynchroner Aufgaben. Wenn Sie ein

erstellen und sein Token an die Aufgabe übergeben, können Sie bei Bedarf eine Stornierung auslösen.

Beispielcode:

CancellationTokenSource Das folgende C# -Code -Snippet zeigt die Verwendung von

, um Zeitüberschreitungen zu verarbeiten:
<code class="language-csharp">private static async Task<string> GetFinalUrl(PortalMerchant portalMerchant)
{
    // ... (Existing code for setting browser features and URL validation) ...

    Uri trackingUrl = new Uri(portalMerchant.Url);
    var cts = new CancellationTokenSource();
    var task = MessageLoopWorker.Run(DoWorkAsync, trackingUrl, cts.Token);

    // Use Task.WhenAny to monitor for task completion or timeout
    if (await Task.WhenAny(task, Task.Delay(5000, cts.Token)) == task)
    {
        // Task completed within the timeout
        if (!String.IsNullOrEmpty(task.Result?.ToString()))
        {
            return new Uri(task.Result.ToString()).ToString(); // Ensure string return
        }
        else
        {
            throw new Exception("Parsing Failed");
        }
    }
    else
    {
        // Timeout occurred
        cts.Cancel(); // Explicitly cancel the task
        throw new TimeoutException();
    }
}

static async Task<object> DoWorkAsync(object[] args)
{
    // ... (Existing code for web browser interaction) ...
}</code>
Nach dem Login kopieren

GetFinalUrl Dieser verbesserte Code -Snippet verarbeitet explizit potenzielle Nullwerte und stellt sicher, dass eine Zeichenfolge von Task.WhenAny zurückgegeben wird. Die Verwendung von DoWorkAsync elegant wartet darauf, dass entweder die cts.Cancel() -Abgabe abgelaufen ist, oder das Ausgangspunkt. Wenn eine Zeitüberschreitung auftritt, wird TimeoutException aufgerufen, um den asynchronen Betrieb sauber abzubrechen, und ein MessageLoopWorker.Run wird geworfen. Die Fehlerbehandlung wird verbessert, um spezifischere Ausnahmemeldungen bereitzustellen. Denken Sie daran, CancellationToken anzupassen, um das

. richtig zu behandeln

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

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