|
|
- static void Main(string[] args)
- {
- Demo01();
- Console.ReadLine();
- }
- static void Demo01()
- {
- //CancellationTokenSource cts = new CancellationTokenSource();
- //CancellationToken token = cts.Token;
- CancellationTokenSource cts = new CancellationTokenSource();
- CancellationTokenSource cts2 = new CancellationTokenSource();
- CancellationTokenSource linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cts.Token, cts2.Token);
- CancellationToken token = linkedCts.Token;
- //CancellationTokenSource被取消时触发
- token.Register(() => { Console.WriteLine("取消令牌"); });
- Test(token);
- //Console.ReadLine();
- //cts.Cancel();
- cts2.CancelAfter(1000);
- Console.ReadLine();
- cts.Dispose();
- Console.WriteLine("Demo完成");
- }
- static async Task Test(CancellationToken token)
- {
- try
- {
- Task task = Task.Run(() =>
- {
- Dowork(token);
- }, token);
- await task;
- Console.WriteLine("任务已经正常完成");
- }
- catch (OperationCanceledException ex)
- {
- Console.WriteLine("任务已经取消");
- }
- catch (Exception ex)
- {
- Console.WriteLine("任务出错了");
- }
- }
- static void Dowork(CancellationToken token)
- {
- int i = 0;
- while (true)
- {
- //token.ThrowIfCancellationRequested();
- if (i % 1000 == 0)
- {
- if (token.IsCancellationRequested)
- {
- Console.WriteLine("任务取消退出");
- break;
- }
- Console.WriteLine($"{DateTime.Now}任务正在执行");
- }
- //Thread.Sleep(1000);
- Thread.Sleep(1);
- i++;
- }
- Console.WriteLine("任务终止");
- }
- }
复制代码
|
|