Aufgabenabbruch in C# effektiv handhaben
Die CancellationToken.CancelNotification
-Methode allein stoppt eine laufende Aufgabe nicht; es signalisiert lediglich die Stornierung. Um sicherzustellen, dass eine Aufgabe beim Abbrechen sauber beendet wird, müssen Sie die Abbruchbehandlung aktiv in die Logik der Aufgabe integrieren.
Nutzung des aufgabenbasierten asynchronen Musters (TAP)
Der effektivste Ansatz ist die konsequente Anwendung von TAP und CancellationToken
:
CancellationToken
: Integrieren Sie einen CancellationToken
-Parameter in jede Methode, die abgebrochen werden kann.cancellationToken.ThrowIfCancellationRequested()
. Wenn ein Abbruch erkannt wird, lösen Sie eine Ausnahme aus, um die Ausführung anzuhalten.Überarbeitetes Codebeispiel mit TAP
Dieses verbesserte Beispiel zeigt die ordnungsgemäße Stornierungsbehandlung:
<code class="language-csharp">private async Task TryTask() { using (var source = new CancellationTokenSource()) { source.CancelAfter(TimeSpan.FromSeconds(1)); try { Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token); int result = await task; // Await will re-throw any exceptions. Console.WriteLine($"Task completed successfully: {result}"); } catch (OperationCanceledException) { Console.WriteLine("Task cancelled successfully."); } } } 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>
Erklärung:
using
-Anweisung: Stellt sicher, dass CancellationTokenSource
ordnungsgemäß entsorgt wird, auch wenn Ausnahmen auftreten.try-catch
-Block: Behandelt das von OperationCanceledException
ausgelöste cancellationToken.ThrowIfCancellationRequested()
und sorgt für eine saubere Stornierungsbehandlung.slowFunc
: Der cancellationToken.ThrowIfCancellationRequested()
-Anruf wird strategisch innerhalb der Schleife platziert, was häufige Stornierungsprüfungen ermöglicht. Dies verhindert unnötige Arbeit nach der beantragten Stornierung.Dieser überarbeitete Ansatz garantiert, dass die Aufgabe sofort gestoppt wird, wenn ein Abbruch angefordert wird, wodurch Ressourcenlecks verhindert und die allgemeine Reaktionsfähigkeit der Anwendung verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Aufgabe nach Abbruch in C# ordnungsgemäß stoppen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!