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 多线程之线程取消相关推荐

  1. .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock

    本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...

  2. Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)

    文章目录 1.线程的定义,进程和线程的关系 2.Linux下的线程 Linux原生线程库(pthread库pthread.h) 线程的优点 线程的私有数据 3.线程控制 ①创建线程(pthread_c ...

  3. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

  4. java基础巩固笔记(5)-多线程之线程并发库

    2019独角兽企业重金招聘Python工程师标准>>> java基础巩固笔记(5)-多线程之线程并发库 标签: java [TOC] 本文主要概述java.util.concurre ...

  5. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

  6. C++多线程以及线程池

    1 线程 1.1 简介   线程(英语:thread)是操作系统能够进行运算调度的最小单位.大部分情况下,它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程 ...

  7. Java多线程与线程并发库高级应用笔记

    以下内容是学习张老师Java多线程与线程并发库高级应用时所做的笔记,很有用 网络编辑器直接复制Word文档排版有点乱,提供原始文件下载 先看源文件概貌 张孝祥_Java多线程与并发库高级应用 [视频介 ...

  8. java多线程之线程本地数据ThreadLocal

    layout: post title: "java多线程之线程本地数据ThreadLocal" subtitle: " "每个线程都有自己的数据,互不干扰.&q ...

  9. 用10086客服热线理解Java高级多线程之线程池

    Java高级多线程之线程池 客服热线案例 引入线程池 1.线程的概念 2.线程池的作用: 获取线程池 1.常用的线程池接口和类 2.代码案例 Callable接口 1.概念简述 2.应用场景 3.方法 ...

最新文章

  1. 看一下操作闪电网络最大的节点是什么感觉
  2. Bind for 0.0.0.0:80 failed: port is already allocated.解决方案
  3. leetcode A String Replacement Problem---流程图
  4. python实现tomasulo算法_手写算法-python代码实现KNN
  5. Centos常用系统命令
  6. 罗马音平假名片假名转换器_关于五十音你所要知道的一切!文末附日网高清字帖...
  7. 网易考拉Android客户端路由总线设计
  8. 丽水数据可视化设计价格_B端产品设计数据可视化图表选择篇
  9. python日期,时间函数
  10. linux下的串口工具minicom、ckermit
  11. 栈“后进先出”和队列中“先进先出”的含义
  12. linux 是什么?
  13. Package.json文件配置
  14. espnet中的transformer和LSTM语言模型对比实验
  15. 知物由学 | 一文读懂Android资源文件保护
  16. Spring Security(一):最简单的Spring Security程序
  17. PDF是如何在线分割的?
  18. [转]申瓯 JSY2000-06 程控电话交换机呼叫转移设置
  19. 基于MQ对登录系统核心流程进行异步化改造,提升系统性能-11
  20. 二叉树 二叉树遍历 通过二叉树遍历求得二叉树

热门文章

  1. Gartner调查研究:中国的数字化发展较之世界水平如何?高性能计算能否占据主导地位?
  2. 工作不要太拼命,领导不会感动的!
  3. 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16
  4. 给孩子吃鸡蛋的五大误区
  5. 大型网站技术架构 读书笔记3 架构师
  6. 怎么实现黑白负片爆闪效果,有Vegas就足够啦
  7. 百度地图添加自定义Marker+显示覆盖层次优先级
  8. python五边形的代码_如何使用pythonttkinter画布中的create_line创建五边形和六边形?...
  9. ICCV2021 Oral 论文及论文实现代码合集
  10. 用Matlab绘制相平面图