我是靠谱客的博主 幽默巨人,这篇文章主要介绍.net 多线程之线程取消,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
1 //线程取消不是操作线程,而是操作信号量(共享变量,多个线程都能访问到的东西,变量/数据库的数据/硬盘数据) 2 //每个线程在执行的过程中,经常去查看下这个信号量,然后自己结束自己 3 //线程不能别人终止,只能自己干掉自己,延迟是少不了的 4 //CancellationTokenSource可以在cancel后,取消没有启动的任务 5 CancellationTokenSource cts = new CancellationTokenSource();//bool值 6 for (int i = 0; i < 40; i++) 7 { 8 string name = string.Format("btnThreadCore_Click{0}", i); 9 Action<object> act = t => 10 { 11 try 12 { 13 //if (cts.IsCancellationRequested) 14 //{ 15 // Console.WriteLine("{0} 取消一个任务的执行", t); 16 //} 17 Thread.Sleep(2000); 18 if (t.ToString().Equals("btnThreadCore_Click11")) 19 { 20 throw new Exception(string.Format("{0} 执行失败", t)); 21 } 22 if (t.ToString().Equals("btnThreadCore_Click12")) 23 { 24 throw new Exception(string.Format("{0} 执行失败", t)); 25 } 26 if (cts.IsCancellationRequested)//检查信号量,是否已经取消这个cts 27 { 28 Console.WriteLine("{0} 放弃执行", t); 29 //return; 30 } 31 else 32 { 33 Console.WriteLine("{0} 执行成功", t); 34 } 35 } 36 catch (Exception ex) 37 { 38 //传达取消请求 39 cts.Cancel(); 40 Console.WriteLine(ex.Message); 41 } 42 }; 43 //cts.Token cts被设置为取消状态后可以自动抛出异常,后面的线程就都不启动了 44 taskList.Add(taskFactory.StartNew(act, name, cts.Token)); 45 } 46 Task.WaitAll(taskList.ToArray());

 

转载于:https://www.cnblogs.com/Spinoza/p/10743790.html

最后

以上就是幽默巨人最近收集整理的关于.net 多线程之线程取消的全部内容,更多相关.net内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部