首页 > 后端开发 > C++ > 如何在 C# 中正确中止或取消 TPL 任务?

如何在 C# 中正确中止或取消 TPL 任务?

Mary-Kate Olsen
发布: 2025-01-25 02:36:09
原创
107 人浏览过

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

中止/取消 TPL 任务

在多线程编程中,当使用 .Abort() 方法终止线程时,在该线程内创建的任务可能会继续运行,从而导致意外行为。本文概述了中止或取消 TPL(任务并行库)任务的正确方法。

TPL 任务在来自线程池的后台线程上执行,无法直接中止它们。推荐的方法是使用取消标记。

取消标记提供了一种向任务发出停止执行信号的方法。为此:

  1. 创建一个 CancellationTokenSource。
  2. 从源获取 CancellationToken。
  3. 通过任务的构造函数或 .WithCancellation() 方法将 CancellationToken 传递给任务。
  4. 当需要中止任务时,在 CancellationTokenSource 上调用 Cancel()。

以下代码示例演示了这种方法:

<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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板