Heim > Backend-Entwicklung > C++ > Wie kann ich TPL-Aufgaben in C# ordnungsgemäß abbrechen oder abbrechen?

Wie kann ich TPL-Aufgaben in C# ordnungsgemäß abbrechen oder abbrechen?

Mary-Kate Olsen
Freigeben: 2025-01-25 02:36:09
Original
107 Leute haben es durchsucht

How to Properly Abort or Cancel TPL Tasks in C#?

TPL-Aufgabe abbrechen/abbrechen

Wenn bei der Multithread-Programmierung ein Thread mit der .Abort()-Methode beendet wird, werden in diesem Thread erstellte Aufgaben möglicherweise weiter ausgeführt, was zu unerwartetem Verhalten führt. In diesem Artikel wird die korrekte Vorgehensweise zum Abbrechen oder Abbrechen einer TPL-Aufgabe (Task Parallel Library) beschrieben.

TPL-Aufgaben werden auf Hintergrundthreads aus dem Thread-Pool ausgeführt, sie können nicht direkt abgebrochen werden. Der empfohlene Ansatz ist die Verwendung von Abbruch-Tags.

Abbruchmarkierungen bieten eine Möglichkeit, einer Aufgabe zu signalisieren, dass sie nicht mehr ausgeführt werden soll. Gehen Sie dazu wie folgt vor:

  1. Erstellen Sie eine CancellationTokenSource.
  2. Holen Sie sich das CancellationToken von der Quelle.
  3. Übergeben Sie das CancellationToken über den Konstruktor der Aufgabe oder die .WithCancellation()-Methode an die Aufgabe.
  4. Wenn die Aufgabe abgebrochen werden muss, rufen Sie Cancel() für die CancellationTokenSource auf.

Das folgende Codebeispiel demonstriert diesen Ansatz:

<code class="language-csharp">class Program
{
    static void Main()
    {
        var cts = new CancellationTokenSource();
        CancellationToken ct = cts.Token;
        Task.Factory.StartNew(() =>
        {
            while (!ct.IsCancellationRequested)
            {
                // 执行一些繁重的工作
                Thread.Sleep(100);
                // 检查取消请求
                if (ct.IsCancellationRequested)
                {
                    Console.WriteLine("任务已取消");
                    break;
                }
            }
        }, ct);

        // 模拟等待任务完成 3 秒
        Thread.Sleep(3000);

        // 无法再等待 => 取消此任务
        cts.Cancel();
        Console.ReadLine();
    }
}</code>
Nach dem Login kopieren

Dieses überarbeitete Beispiel verwendet !ct.IsCancellationRequested in der while-Schleifenbedingung für eine bessere Lesbarkeit und Klarheit und prüft direkt, ob die Abbruchanforderung innerhalb der Schleife vorliegt. Die Kernfunktionalität bleibt dieselbe und bietet eine saubere und effiziente Möglichkeit, den Aufgabenabbruch zu handhaben .

Das obige ist der detaillierte Inhalt vonWie kann ich TPL-Aufgaben in C# ordnungsgemäß abbrechen oder abbrechen?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage