优雅终止 TPL 任务:利用取消令牌
在并行编程中,管理任务的生命周期至关重要。 虽然线程提供了 Abort
方法,但这并不适合使用线程池的任务并行库 (TPL) 任务。 中断 TPL 任务需要更优雅的解决方案。
推荐的方法涉及CancellationToken
。 这些令牌提供了一种向正在运行的任务发出取消请求信号的机制。 我们举个例子来说明一下:
<code class="language-csharp">class Program { static void Main() { var cts = new CancellationTokenSource(); CancellationToken ct = cts.Token; Task task = Task.Factory.StartNew(() => { while (!ct.IsCancellationRequested) { // Perform lengthy operation Thread.Sleep(100); } Console.WriteLine("Task cancelled gracefully."); }, ct); // Simulate some work before cancellation Thread.Sleep(3000); // Initiate cancellation cts.Cancel(); task.Wait(); // Wait for task completion Console.ReadLine(); } }</code>
此代码演示了 CancellationTokenSource
如何创建任务监视的令牌。 IsCancellationRequested
属性允许任务检查取消请求。 收到取消信号后,任务会干净地退出,避免突然终止。 该方法确保了受控且可预测的任务终止,与 Abort
方法潜在的不稳定问题相比有了显着改进。
以上是我们如何有效取消TPL任务?的详细内容。更多信息请关注PHP中文网其他相关文章!