• 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);
    •  
  • 相关阅读:
    freeswitch 对接IMS
    freeswitch对接北京移动IMS
    多台 FreeSWITCH 服务器级联
    FreeSWITCH代码分析
    软交换freeswitch系统概要和源代码分析初步
    SQL*Net message from client
    FreeSwitch下配置DID的方法
    FreeSWITCH实现多人来电思路
    SIP开源项目opensip,Freeswitch
    运行 FreeSWITCH
  • 原文地址:https://www.cnblogs.com/51net/p/16462922.html
Copyright © 2020-2023  润新知