• 协作式取消 CancellationTokenSource


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Threading;
    namespace TaskApp
    {
    class Program
    {
    static void Main(string[] args)
    {
    //CancellationTokenSource:IDispose
    using (CancellationTokenSource cts = new CancellationTokenSource())
    {
     
    ThreadPool.QueueUserWorkItem(o => Caculate(cts.Token, 60));
     
    Console.ReadKey();
    //lanch cancel method
    cts.Cancel();
     
    Console.ReadKey();
    }
    }
     
    /// <summary>
    /// Caculate
    /// </summary>
    /// <param name="ct">CancellationToken</param>
    /// <param name="maxNumber"></param>
    private static void Caculate(CancellationToken ct,int maxNumber)
    {
    int sum = 0;
    for (int i = 0; i < maxNumber; i++)
    {
    if (!ct.IsCancellationRequested)
    {
    Thread.Sleep(1000);
    sum += i;
    }
    else
    {
    Console.WriteLine("Caculate is cancelled:sum={0}", sum);
     
    return;
    }
     
    }
    Console.WriteLine("Caculate Finished:{0}!",sum);
    }
    }
    }
     
     
    CancellationToken 中肯定存在一种传入方法后能实时刷新的机制,CancellationTokenSource 的实例调用 Cancel方法后 ,Caculate 方法能感知到这种变化。
     
  • 相关阅读:
    Linux问题汇总
    Linux问题汇总
    朴素贝叶斯分类器
    捕捉异常信息
    异常处理类
    sqlserver2008链接服务器的使用和oracle11g客户端修改字符集
    抛出异常
    添加水印
    验证码
    sqlserver数据库备份
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/7061598.html
Copyright © 2020-2023  润新知