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