• C# Task使用CancellationTokenSource取消任务


    • 使用CancellationTokenSource取消任务

      CancellationTokenSource Source = new CancellationTokenSource();                  
                  Task T = Task.Factory.StartNew(() =>
                  {
                   //如果Token被取消  
                      while (!Source.IsCancellationRequested)
                      {
                          Thread.Sleep(100);
                          Console.WriteLine("当前Thread正在运行{0}", Thread.CurrentThread.ManagedThreadId);
                      }
                  }, Source.Token);
                  Thread.Sleep(1000);
                  Source.Cancel();     

      取消的回调方法

           CancellationTokenSource Source = new CancellationTokenSource();
                   Source.Token.Register(() =>
                   {
                       Console.WriteLine("当前的Source已经被取消");
                   });
                   Task T = Task.Factory.StartNew(() =>
                   {
                       while (!Source.IsCancellationRequested)
                       {
                           Thread.Sleep(100);
                           Console.WriteLine("当前Thread正在运行{0}", Thread.CurrentThread.ManagedThreadId);
                       }
                   }, Source.Token);
                   Thread.Sleep(1000);
                   Source.Cancel();

      延时取消

      CancellationTokenSource Source = new CancellationTokenSource();
                   Source.Token.Register(() =>
                   {
                       Console.WriteLine("当前的Source已经被取消");
                   });
                   Task T = Task.Factory.StartNew(() =>
                   {
                       while (!Source.IsCancellationRequested)
                       {
                           Thread.Sleep(100);
                           Console.WriteLine("当前Thread正在运行{0}", Thread.CurrentThread.ManagedThreadId);
                       }
                   }, Source.Token);           
                   //延时取消
                   Source.CancelAfter(new TimeSpan(0, 0, 0, 5));

      取消的组合

         //只要一个被取消,comineSource的组合就被取消,类似于WhenAny
                     CancellationTokenSource Source = new CancellationTokenSource();
                     Source.Cancel();
                     CancellationTokenSource Source2 = new CancellationTokenSource();
                     //comineSource 里面只要有一个被取消了,comineSource的状态就被取消
                     var comineSource = CancellationTokenSource.CreateLinkedTokenSource(Source.Token, Source2.Token);             
                     Console.WriteLine("s1={0},s2={1},s3={2}", Source.IsCancellationRequested, Source2.IsCancellationRequested, comineSource.IsCancellationRequested);
    •  
  • 相关阅读:
    JavaScript之arguments对象讲解
    JavaScript之工厂方式 构造函数方式 原型方式讲解
    JavaScript之常用方法讲解
    JavaScript之引用类型讲解
    JavaScript之数据类型讲解
    JavaScript之Cookie讲解
    __cdecl __stdcall __fastcall之函数调用约定讲解
    xp/2003开关3389指令
    php源码安装常用配置参数和说明
    用yum查询想安装的软件
  • 原文地址:https://www.cnblogs.com/51net/p/16462922.html
Copyright © 2020-2023  润新知