我是靠谱客的博主 幽默巨人,最近开发中收集的这篇文章主要介绍.net 多线程之线程取消,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 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 多线程之线程取消所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部