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

代码
csharp
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);
}
}
}