中止/取消 TPL 任务
在多线程编程中,当使用 .Abort() 方法终止线程时,在该线程内创建的任务可能会继续运行,从而导致意外行为。本文概述了中止或取消 TPL(任务并行库)任务的正确方法。
TPL 任务在来自线程池的后台线程上执行,无法直接中止它们。推荐的方法是使用取消标记。
取消标记提供了一种向任务发出停止执行信号的方法。为此:
以下代码示例演示了这种方法:
<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>
This revised example uses !ct.IsCancellationRequested
in the while
loop condition for better readability and clarity, directly checking for the cancellation request within the loop. The core functionality remains the same, providing a clean and efficient way to handle task cancellation.
以上是如何在 C# 中正确中止或取消 TPL 任务?的详细内容。更多信息请关注PHP中文网其他相关文章!