Heim >Backend-Entwicklung >C++ >Wie kann ich asynchrone Aufgaben in Windows 8 WinRT richtig stornieren?

Wie kann ich asynchrone Aufgaben in Windows 8 WinRT richtig stornieren?

DDD
DDDOriginal
2025-01-26 12:46:09455Durchsuche

How Can I Properly Cancel Asynchronous Tasks in Windows 8 WinRT?

Anmutiger Umgang mit dem Abbruch asynchroner Aufgaben in WinRT

Die asynchrone Aufgabenverwaltung von Windows 8 WinRT ist zwar leistungsstark, stellt jedoch beim Abbrechen von Aufgaben Herausforderungen dar. Ein häufiges Problem besteht darin, dass die Methode CancelNotification ausgelöst wird, die Aufgabe jedoch weiterhin ausgeführt wird und der Aufgabenstatus fälschlicherweise als „abgeschlossen“ statt als „abgebrochen“ markiert bleibt.

Die Lösung: CancellationTokeneffektiv nutzen

Der Schlüssel zur Lösung dieses Problems liegt in der korrekten Implementierung des CancellationToken und der Einhaltung der Task-Based Asynchronous Pattern (TAP)-Richtlinien. Dazu gehört die Übergabe eines CancellationToken an jede stornierbare Methode und die regelmäßige Überprüfung ihres Status innerhalb dieser Methoden.

Überarbeitetes Codebeispiel:

Dieser verbesserte Codeausschnitt demonstriert die ordnungsgemäße Verwendung von CancellationToken:

<code class="language-csharp">private async Task TryTask()
{
    CancellationTokenSource source = new CancellationTokenSource();
    source.CancelAfter(TimeSpan.FromSeconds(1));
    Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token);

    try
    {
        // A canceled task will throw an exception when awaited.
        await task;
    }
    catch (OperationCanceledException)
    {
        // Handle cancellation gracefully.
    }
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
    for (int i = 0; i < 1000000; i++)
    {
        cancellationToken.ThrowIfCancellationRequested(); // Check for cancellation
        // ... your long-running operation ...
    }
    return a + b;
}</code>

Diese überarbeitete slowFunc-Methode enthält eine cancellationToken.ThrowIfCancellationRequested()-Prüfung in ihrer Schleife. Wenn ein Abbruch angefordert wird, wird ein OperationCanceledException ausgelöst, wodurch die Aufgabe effektiv gestoppt und ihr Status korrekt auf „abgebrochen“ gesetzt wird. Die TryTask-Methode enthält jetzt einen try-catch-Block zur Behandlung dieser Ausnahme.

Ergebnis:

Dieser Ansatz stellt sicher, dass Aufgaben nach dem Abbruch vollständig angehalten werden, wodurch genaue Berichte zum Aufgabenstatus bereitgestellt werden und eine unbeabsichtigte Ausführung im Hintergrund verhindert wird. Die richtige Ausnahmebehandlung erhöht die Robustheit weiter.

Das obige ist der detaillierte Inhalt vonWie kann ich asynchrone Aufgaben in Windows 8 WinRT richtig stornieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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