Heim > Backend-Entwicklung > C++ > Wie kann ich eine Aufgabe nach Abbruch in C# ordnungsgemäß stoppen?

Wie kann ich eine Aufgabe nach Abbruch in C# ordnungsgemäß stoppen?

DDD
Freigeben: 2025-01-26 12:36:10
Original
675 Leute haben es durchsucht

How Can I Properly Stop a Task Upon Cancellation in C#?

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:

  • Pass CancellationToken: Integrieren Sie einen CancellationToken-Parameter in jede Methode, die abgebrochen werden kann.
  • Regelmäßige Stornierungsprüfungen: Überprüfen Sie bei diesen Methoden regelmäßig den Status des Tokens mit 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>
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage