C# Task 取消 CancellationTokenSource CancellationToken

Task 取消

Ps:个人理解

source.Cancel(); 会取消所有的对应的线程

task.Wait(100); 会非同步的阻塞 但是不会到下面的代码里面去 《具体请看wait any的出现位置》

class Program
    {
        static void Main(string[] args)
        {
            List<Task> tasks = new List<Task>();
            CancellationTokenSource source = new CancellationTokenSource();
            CancellationToken token = source.Token;
            int i;
            try
            {

                for (i = 0; i < 100; i++)
                {
                    Console.WriteLine("start:" + i);
                    Task task = Task.Run(() =>
                    {
                        int num = i;
                        Thread.Sleep(2000);
                        Console.WriteLine("finish:" + num);
                    }, token);
                    task.Wait(100);
                    Console.WriteLine("end:" + i);
                    tasks.Add(task);
                }
                Console.WriteLine("wait any");
                Task.WaitAny(tasks.ToArray());
                Console.WriteLine("cancel");
                source.Cancel();
                //Thread.Sleep(1000);
                Console.WriteLine("wait all");  

                Task.WaitAll(tasks.ToArray());  //应为cancel会产生异常
                Console.WriteLine("*****" + i);
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.InnerExceptions)
                {
                    Console.WriteLine("\nhi,我是OperationCanceledException:{0}\n", e.Message);
                }

                //task1是否取消
                //Console.WriteLine("task1是不是被取消了? {0}", task1.IsCanceled);
                //Console.WriteLine("task2是不是被取消了? {0}", task2.IsCanceled);
            }

            for (int j = 0; j < tasks.Count; j++) {
                Console.WriteLine("task{0}是不是被取消了? {1}",j, tasks[j].IsCanceled);
            }


        }
    }
start:0
end:0
start:1
end:1
start:2
end:2
start:3
end:3
start:4
end:4
start:5
end:5
start:6
end:6
start:7
end:7
start:8
end:8
start:9
end:9
start:10
end:10
start:11
end:11
start:12
end:12
start:13
end:13
start:14
end:14
start:15
end:15
start:16
end:16
start:17
end:17
start:18
end:18
start:19
end:19
start:20
finish:0
finish:1
end:20
start:21
finish:2
end:21
start:22
finish:3
end:22
start:23
finish:4
end:23
start:24
finish:5
end:24
start:25
end:25
start:26
end:26
start:27
end:27
start:28
end:28
start:29
end:29
start:30
end:30
start:31
end:31
start:32
end:32
start:33
end:33
start:34
finish:14
end:34
start:35
end:35
start:36
end:36
start:37
end:37
start:38
end:38
start:39
finish:20
end:39
start:40
finish:20
end:40
start:41
finish:21
end:41
start:42
finish:22
end:42
start:43
finish:23
end:43
start:44
finish:24
end:44
start:45
end:45
start:46
end:46
start:47
end:47
start:48
end:48
start:49
end:49
start:50
end:50
start:51
end:51
start:52
end:52
start:53
end:53
start:54
finish:34
finish:34
end:54
start:55
end:55
start:56
end:56
start:57
end:57
start:58
end:58
start:59
finish:39
end:59
start:60
finish:40
end:60
start:61
finish:41
end:61
start:62
finish:42
end:62
start:63
finish:43
end:63
start:64
finish:44
end:64
start:65
end:65
start:66
end:66
start:67
end:67
start:68
end:68
start:69
end:69
start:70
end:70
start:71
end:71
start:72
end:72
start:73
finish:54
finish:54
finish:54
end:73
start:74
end:74
start:75
end:75
start:76
end:76
start:77
end:77
start:78
end:78
start:79
finish:59
finish:60
end:79
start:80
finish:61
end:80
start:81
finish:62
end:81
start:82
finish:63
end:82
start:83
finish:64
end:83
start:84
end:84
start:85
end:85
start:86
end:86
start:87
end:87
start:88
end:88
start:89
end:89
start:90
end:90
start:91
end:91
start:92
end:92
start:93
finish:73
finish:73
finish:73
finish:73
end:93
start:94
end:94
start:95
end:95
start:96
end:96
start:97
end:97
start:98
finish:79
end:98
start:99
finish:79
end:99
wait any
cancel
wait all
finish:80
finish:81
finish:82
finish:83
finish:93
finish:93
finish:93
finish:93
finish:93
finish:98
finish:99

hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。


hi,我是OperationCanceledException:已取消一个任务。

task0是不是被取消了? False
task1是不是被取消了? False
task2是不是被取消了? False
task3是不是被取消了? False
task4是不是被取消了? False
task5是不是被取消了? False
task6是不是被取消了? False
task7是不是被取消了? False
task8是不是被取消了? False
task9是不是被取消了? False
task10是不是被取消了? False
task11是不是被取消了? False
task12是不是被取消了? False
task13是不是被取消了? False
task14是不是被取消了? False
task15是不是被取消了? False
task16是不是被取消了? False
task17是不是被取消了? False
task18是不是被取消了? False
task19是不是被取消了? False
task20是不是被取消了? False
task21是不是被取消了? False
task22是不是被取消了? False
task23是不是被取消了? False
task24是不是被取消了? False
task25是不是被取消了? False
task26是不是被取消了? False
task27是不是被取消了? False
task28是不是被取消了? False
task29是不是被取消了? False
task30是不是被取消了? False
task31是不是被取消了? False
task32是不是被取消了? False
task33是不是被取消了? False
task34是不是被取消了? False
task35是不是被取消了? False
task36是不是被取消了? False
task37是不是被取消了? False
task38是不是被取消了? False
task39是不是被取消了? False
task40是不是被取消了? False
task41是不是被取消了? False
task42是不是被取消了? False
task43是不是被取消了? False
task44是不是被取消了? False
task45是不是被取消了? False
task46是不是被取消了? False
task47是不是被取消了? True
task48是不是被取消了? True
task49是不是被取消了? True
task50是不是被取消了? True
task51是不是被取消了? True
task52是不是被取消了? True
task53是不是被取消了? True
task54是不是被取消了? True
task55是不是被取消了? True
task56是不是被取消了? True
task57是不是被取消了? True
task58是不是被取消了? True
task59是不是被取消了? True
task60是不是被取消了? True
task61是不是被取消了? True
task62是不是被取消了? True
task63是不是被取消了? True
task64是不是被取消了? True
task65是不是被取消了? True
task66是不是被取消了? True
task67是不是被取消了? True
task68是不是被取消了? True
task69是不是被取消了? True
task70是不是被取消了? True
task71是不是被取消了? True
task72是不是被取消了? True
task73是不是被取消了? True
task74是不是被取消了? True
task75是不是被取消了? True
task76是不是被取消了? True
task77是不是被取消了? True
task78是不是被取消了? True
task79是不是被取消了? True
task80是不是被取消了? True
task81是不是被取消了? True
task82是不是被取消了? True
task83是不是被取消了? True
task84是不是被取消了? True
task85是不是被取消了? True
task86是不是被取消了? True
task87是不是被取消了? True
task88是不是被取消了? True
task89是不是被取消了? True
task90是不是被取消了? True
task91是不是被取消了? True
task92是不是被取消了? True
task93是不是被取消了? True
task94是不是被取消了? True
task95是不是被取消了? True
task96是不是被取消了? True
task97是不是被取消了? True
task98是不是被取消了? True
task99是不是被取消了? True

你可能感兴趣的:(C#)