查看: 41|回复: 0

C# CancellationTokenSource 令牌取消操作

[复制链接]

280

主题

1

回帖

1467

积分

管理员

积分
1467
QQ
发表于 2025-10-15 08:16:00 | 显示全部楼层 |阅读模式
  1.     static void Main(string[] args)
  2.     {
  3.         Demo01();
  4.         Console.ReadLine();
  5.     }

  6.     static void Demo01()
  7.     {
  8.         //CancellationTokenSource cts = new CancellationTokenSource();
  9.         //CancellationToken token = cts.Token;

  10.         CancellationTokenSource cts = new CancellationTokenSource();
  11.         CancellationTokenSource cts2 = new CancellationTokenSource();
  12.         CancellationTokenSource linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cts.Token, cts2.Token);
  13.         CancellationToken token = linkedCts.Token;

  14.         //CancellationTokenSource被取消时触发
  15.         token.Register(() => { Console.WriteLine("取消令牌"); });
  16.         Test(token);

  17.         //Console.ReadLine();
  18.         //cts.Cancel();
  19.         cts2.CancelAfter(1000);

  20.         Console.ReadLine();
  21.         cts.Dispose();
  22.         Console.WriteLine("Demo完成");

  23.     }

  24.     static async Task Test(CancellationToken token)
  25.     {
  26.         try
  27.         {
  28.             Task task = Task.Run(() =>
  29.             {
  30.                 Dowork(token);
  31.             }, token);

  32.             await task;
  33.             Console.WriteLine("任务已经正常完成");
  34.         }
  35.         catch (OperationCanceledException ex)
  36.         {
  37.             Console.WriteLine("任务已经取消");
  38.         }
  39.         catch (Exception ex)
  40.         {
  41.             Console.WriteLine("任务出错了");
  42.         }
  43.     }

  44.     static void Dowork(CancellationToken token)
  45.     {
  46.         int i = 0;
  47.         while (true)
  48.         {
  49.             //token.ThrowIfCancellationRequested();
  50.             if (i % 1000 == 0)
  51.             {
  52.                 if (token.IsCancellationRequested)
  53.                 {
  54.                     Console.WriteLine("任务取消退出");
  55.                     break;
  56.                 }

  57.                 Console.WriteLine($"{DateTime.Now}任务正在执行");
  58.             }
  59.             //Thread.Sleep(1000);
  60.             Thread.Sleep(1);
  61.             i++;
  62.         }

  63.         Console.WriteLine("任务终止");
  64.     }
  65. }
复制代码


高级模式
B Color Image Link Quote Code Smilies

本版积分规则

关于我们

企业文化

人才招聘

常见问题

建议反馈

合作伙伴

商务合作

新闻媒体

产品服务

客户案例

联系我们

联系电话:14776878570(同VX号)

邮箱:14776878570@163.com(同VX号)

工作时间:周一至周六(早上8点至下午10点)

关注微信公众号

QQ|Archiver|手机版|小黑屋|鸿翔机器人

GMT+8, 2025-11-6 15:28 , Processed in 0.059859 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.