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: CancellationToken
effektiv 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!