C#_利用CancellationToken取消task

直接代码:

        static void Main(string[] args)
        {
            CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
            CancellationToken cancellationToken = cancellationTokenSource.Token;

            Console.WriteLine("To terminate the example, press 'c' to cancel and exit...");
            Console.WriteLine();

            Task[] taskArray = new Task[10];
            for (int i = 0; i < taskArray.Length; i++)
            {
                taskArray[i] = Task.Factory.StartNew(() => CheckItems(Convert.ToInt32(Task.CurrentId),cancellationToken), cancellationToken);
            }

            char ch = Console.ReadKey().KeyChar;
            if (ch == 'c' || ch == 'C')
            {
                Console.WriteLine();
                cancellationTokenSource.Cancel();
            }        

            Console.ReadLine();
        }
        private static void CheckItems(int i, CancellationToken token)
        {
            try
            {
                Console.WriteLine($"{i} is started");
                Thread.Sleep(5000);
                if (token.IsCancellationRequested)
                {
                    token.ThrowIfCancellationRequested();
                }
                Console.WriteLine($"{i} is finished");
            }
            catch (OperationCanceledException)
            {
                Console.WriteLine($"{nameof(OperationCanceledException)} thrown, {i} canceled");
            }          
        }

 

posted @ 2020-03-31 15:42  自定义的星空  阅读(2356)  评论(0)    收藏  举报