C# 对多个任务进行符合管理
背景:上位机对设备进行采集,启动服务时,从数据库中查询设备信息,对每台设备开启采集服务,停止服务时,关闭全部服务。存在特殊情况,某台服务在界面上进行单独的开启或关闭、或新增服务时,支持主动开启。
基于上面业务场景用到,task的复合管理

代码
internal class Program{//声明CancellationTokenSource对象static CancellationTokenSource masterCancelTokenSource = new CancellationTokenSource();//声明CancellationTokenSource对象static CancellationTokenSource c1 = new CancellationTokenSource();static CancellationTokenSource c2 = new CancellationTokenSource();static CancellationTokenSource c3 = new CancellationTokenSource();//使用多个CancellationTokenSource进行复合管理static CancellationTokenSource compositeCancel1 = CancellationTokenSource.CreateLinkedTokenSource(masterCancelTokenSource.Token, c1.Token);static CancellationTokenSource compositeCancel2 = CancellationTokenSource.CreateLinkedTokenSource(masterCancelTokenSource.Token, c2.Token);static CancellationTokenSource compositeCancel3 = CancellationTokenSource.CreateLinkedTokenSource(masterCancelTokenSource.Token, c3.Token);//程序入口static void Main(string[] args){Task.Factory.StartNew(MyTask1, compositeCancel1.Token);Task.Factory.StartNew(MyTask2, compositeCancel2.Token);Task.Factory.StartNew(MyTask3, compositeCancel3.Token);Console.WriteLine("请按回车键(Enter)停止");while (!masterCancelTokenSource.IsCancellationRequested){string key = Console.ReadLine();if (key == "1"){c1.Cancel();}else if (key == "2"){c2.Cancel();}else if (key == "3"){c3.Cancel();}else{masterCancelTokenSource.Cancel();}}//任意一个 CancellationTokenSource 取消任务,那么所有任务都会被取消。//c1.Cancel();Console.WriteLine("已停止");Console.ReadLine();}//测试方法static void MyTask1(){//判断是否取消任务while (!compositeCancel1.IsCancellationRequested){Console.WriteLine($"{DateTime.Now}----111");Thread.Sleep(1000);}}//测试方法static void MyTask2(){//判断是否取消任务while (!compositeCancel2.IsCancellationRequested){Console.WriteLine($"{DateTime.Now}----222");Thread.Sleep(1000);}}//测试方法static void MyTask3(){//判断是否取消任务while (!compositeCancel3.IsCancellationRequested){Console.WriteLine($"{DateTime.Now}----333");Thread.Sleep(1000);}}}