C#多线程开发-处理子线程中的异常

C#多线程开发-处理子线程中的异常

在平时的多线程开发中,对于异常的处理是至关重要的,千万不能马虎。如果在实际的项目中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件无法使用。

其中需要说明的是,在子线程中产生的异常是无法在主线程被捕获到,也就是你即使在使用线程方法外有try/catch也无济于事,线程中的异常只能在线程中捕获并处理。

比如下面的例子,可以看到在创建线程的代码是在try/catch中的,按照常理来说,如果子线程中有异常发生那么外部的try/catch是可以正常收到异常通知的。

static void Main(string[] args){try{Thread tempThread = new Thread(Test); tempThread.Start();} catch (Exception ex){Console.WriteLine("" + ex.Message);}}private static void Test(){Thread.Sleep(100);for (int i = 0; i < 100; i++){Console.WriteLine("" + i);if (i == 10){throw new Exception("触发异常" + i);}}}

运行上面的代码,可以看到程序无法在外部通过try/catch方法接收到异常,运行后软件会直接异常到子线程中,无法把异常再次往出抛。以后我们在使用线程/异步(也是一种特殊的线程)时要特别的留心。

54adcb040d18dbbeae6e5526930fa6f0.png

然而正确的做法是在子线程中捕获并处理异常。把程序进行修改,下面就可以正确捕获到异常信息。

private static void Test(){Thread.Sleep(100);try{for (int i = 0; i < 100; i++){Console.WriteLine("" + i);if (i == 10){throw new Exception("触发异常" + i);}}}catch (Exception ex){Console.WriteLine("捕获的子线程中的异常信息:"+ex.Message);}            }

看下面图片,程序就在子线程中捕获到了异常信息。

eb5941f8af565f094ac901cf1380c56a.png

小寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看的见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发  谢谢。

3ad945ec57bc0fdbcee6ad58b4f94c31.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab提速技巧(自matlab帮助文件)

matlab提速技巧&#xff08;自matlab帮助文件&#xff09; 1.首先要学会用profiler.1.1. 打开profiler.To open the Profiler, select View -> Profiler from the MATLAB desktop, or type profile viewer in the Command Window. The MATLAB Profiler opens.在我的机器上是…

GAC及其作用

http://www.cnblogs.com/smallstone/archive/2010/06/29/1767508.html 一、GAC的作用 全称是Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly&#xff0c;例如System.Data、System.Windows.Forms等等。这样&#xff0c;很多程序就可以从GAC里面取得…

python 装饰器实现_Python装饰器系列01 - 如何正确地实现装饰器

虽然人们能利用函数闭包(function clouser)写出简单的装饰器&#xff0c;但其可用范围常受限制。多数实现装饰器的基本方式会破坏与内省(Introspection)的关联性。可大多数人会说&#xff1a;who cares&#xff01;但我仍坚持追求正确地写出漂亮代码。我爱内省(introspection)&…

高校教师抄袭豆瓣博主文章,学校证实:基本属实!记过并调离教学科研岗位...

全世界只有3.14 % 的人关注了爆炸吧知识导读作为高层次人才被杭州市引进&#xff0c;并于杭州师范大学任教的教师郭某某最近陷入了一则被指博士论文涉嫌抄袭豆瓣网友事件&#xff0c;近日&#xff0c;学校调查后证实。本文来源&#xff1a;募格学术综合自&#xff1a;红星新闻 …

linux默认归档目录,Linux系统管理(第4章:目录和文件管理二)

Linux系统管理(第4章&#xff1a;目录和文件管理二)一.练习文件查看及检索操作1.查看/etc/filesystems文件&#xff0c;确认当前系统支持的文件系统类型Cat&#xff1a;用于连接多个文件的内容&#xff0c;更多用于查看文件内容2.分页查看/etc/services文件&#xff0c;了解各种…

ASP.NET Core Filter与IOC的羁绊

前言我们在使用ASP.NET Core进行服务端应用开发的时候&#xff0c;或多或少都会涉及到使用Filter的场景。Filter简单来说是Action的拦截器&#xff0c;它可以在Action执行之前或者之后对请求信息进行处理。我们知道.Net Core默认是提供了IOC的功能&#xff0c;而且IOC是.Net Co…

error: storage class specified for parameter问题

error: storage class specified for parameter今天编译时&#xff0c;出现error: storage class specified for parameter问题一下子出现了很多错误&#xff1b;最后&#xff0c;发现是新增的头文件中&#xff0c;最后一个函数的声明缺少一个";“ 引起这个错误虽然很小&a…

sql里如何for循环

declare i intset i1while i<1000begininsert into dbo.T_Uservalues(aaaa,ddddd)set ii1end转载于:https://www.cnblogs.com/lilyzhang/archive/2012/06/14/2549762.html

HTML meta refresh 刷新与跳转(重定向)页面

refresh 属性值 -- 刷新与跳转(重定向)页面refresh用于刷新与跳转(重定向)页面refresh出现在http-equiv属性中&#xff0c;使用content属性表示刷新或跳转的开始时间与跳转的网址引用网址: http://blog.csdn.net/jiankunking demo&#xff1a; <!DOCTYPE html> <html …

一组动图看懂3D打印原理

全世界只有3.14 % 的人关注了爆炸吧知识3D打印是制造业领域的一项新兴技术&#xff0c;被称为“具有工业革命意义的制造技术”。近年来&#xff0c;随着工业技术的进步&#xff0c;3D打印技术得到迅速发展并得到媒体的广泛关注&#xff0c;各类3D打印技术被纷纷报道。下面&…

生产者消费者_【线程通信】生产者消费者模型

1生产者消费者模型介绍生产者消费者模型&#xff0c;是每一个学习多线程的的人都需要知道的模型; 大致情况就是&#xff1a;有两个线程&#xff0c;一个负责生产产品&#xff0c;一个消费产品&#xff0c;两者公用同一块内存区域&#xff0c;也就是产品放在了同一块内存上面&am…

linux检查系统硬件信息命令,Linux查看系统信息(硬件信息, 系统设置信息等) 命令 | Soo Smart!...

Linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有必要的!下面给除了各linux发行版比较常用的系统信息查询的命令, 大家可以参考, 同时也可以…

在Orchard中使用Image Gallery模块

作为ASP.NET MVC领域一款优秀的开源CMS&#xff0c;Orchard值得所有.NET Web开发人员学习和研究&#xff0c;然后二次开发&#xff0c;最后在其基础上创新。也是遵循国内人员学习IT技术的路线&#xff1a;引进->吸收->消化。 Orchard有很多优秀的功能&#xff0c;在此不一…

宝宝的成长脚印6/15

这半个多月来 在六一儿童节这天&#xff0c;中午带宝宝去一家杂货店门口坐了几分钟喜洋洋摇摇车&#xff0c;傍晚时带他去公园玩滑梯&#xff0c;坐转马&#xff0c;晚上请他吃火车头盒饭 小家伙自己拿勺吃饭越来越稳了&#xff0c;但还需要喂&#xff0c;有时喂他吃时会吃一两…

Dapr + .NET 实战(十二)服务调用之GRPC

欢迎大家参加4小时Dapr.NET 5的实战课程课程链接 https://ke.qq.com/course/4000292?tuin1271860f什么是GRPCgRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。gRPC 的主要优点是&#xff1a;高性能轻量级 RPC 框架。协定优先 API 开发&#xff0c;默认使用协议缓冲…

SCVMM 2012 R2运维管理九之:添加非信任的Hyper-v主机和群集

SCVMM 2012 R2运维管理九之&#xff1a;添加非信任的Hyper-v主机和群集之前的博文中我们为各位朋友介绍了如何向SCVMM中添加受信任的Hyper-v的主机和群集&#xff0c;相信大家也都已经有了一个比较深刻的理解&#xff0c;那么今天的博文中就来和大家聊聊:如何添加非受信任的Hyp…

走访近20家代工厂后:近千块的大牌T恤,成本只要几十块

▲ 点击查看“很多人都知道大牌有溢价但是不知道大牌溢价逼近900%打个比方一件1000块的T恤&#xff0c;T恤成本如果是100那么剩下的900&#xff0c;算是买了个大牌logo”这是我们上个月去到的一家中国代工厂工厂内部人员向我们透露的他说&#xff0c;其实无论是纪梵希、爱马仕、…

python execute_command err_Python management.execute_from_command_line方法代碼示例

本文整理匯總了Python中django.core.management.execute_from_command_line方法的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Python management.execute_from_command_line方法的具體用法&#xff1f;Python management.execute_from_command_line怎麽用&#xff1f;…

linux脚本多线程,Shell多线程操作及线程数控制实例

前言在业务开发过程中&#xff0c;经常会在后台写一些shell脚本处理数据&#xff0c;但估计很多人不知道shell脚本也可以支持多线程&#xff0c;而且非常简单。本篇文章主要就是介绍shell实现多进程以及进程数量控制。需求为了更好的说明问题&#xff0c;我们结合例子讲解&…

Node.js Undocumented(2)

写这种系列blog&#xff0c;是为了监督自己&#xff0c;不然我估计我不会有动力写完。这一节&#xff0c;我将介绍下Buffer这个module。js本身对文本友好&#xff0c;但是处理二进制数据就不是特别方便&#xff0c;因此node.js提供了Buffer模块来帮助你处理二进制数据&#xff…