博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理
阅读量:4632 次
发布时间:2019-06-09

本文共 1427 字,大约阅读时间需要 4 分钟。

建议86:Parallel中的异常处理

建议85阐述了如何处理Task中的异常。由于Task的Start方法是异步启动的,所以我们需要额外的技术来完成异常处理。Parallel相对来说就要简单很多,因为Parallel的调用者线程会等到所有的任务全部完成后,再继续自己的工作。简单来说,它具有同步的特性,所以,用下面的这段代码就可以实现将并发异常包装到主线程中:

static void Main(string[] args)  {      try      {          var parallelExceptions = new ConcurrentQueue
(); Parallel.For(0, 1, (i) => { try { throw new InvalidOperationException("并行任务中出现的异常"); } catch (Exception e) { parallelExceptions.Enqueue(e); } if (parallelExceptions.Count > 0) throw new AggregateException(parallelExceptions); }); } catch (AggregateException err) { foreach (Exception item in err.InnerExceptions) { Console.WriteLine("异常类型:{0}{1}来自: {
2}{
3}异常内容:{
4}", item.InnerException.GetType(), Environment.NewLine, item.InnerException.Source, Environment.NewLine, item.InnerException.Message); } } Console.WriteLine("主线程马上结束"); Console.ReadKey(); }

这段代码的输出为:

异常类型:System.InvalidOperationException  
来自:ConsoleApplication2  
异常内容:并行任务中出现的异常  
主线程马上结束

在Parallel的异常处理中,我们使用了一个线程安全的泛型集合ConcurrentQueue<T>来处理并发中有可能会遇到的集合线程安全性问题(参见建议22:确保集合的线程安全)。

 

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

转载于:https://www.cnblogs.com/jesselzj/p/4743476.html

你可能感兴趣的文章
用JAVA生成老电影海报
查看>>
Android 网络图片Url 转 Bitmap
查看>>
maven install 打包 报错 Cannot run program "gpg.exe": CreateProcess error
查看>>
abstract类中method
查看>>
mysql中 where in 用法
查看>>
Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)
查看>>
对象,对象引用变量理解
查看>>
14Oracle Database 高级事务,游标
查看>>
Qt无法调试Qvector
查看>>
解决TinyMCE不能插入媒体播放器的问题
查看>>
c语言中的结构体指针类型的cast
查看>>
编码规范
查看>>
如何在一台机子上启动两个TOMCAT
查看>>
jeecg 定时任务配置用法
查看>>
[状压dp]JZOJ P3632——舞伴
查看>>
[并查集][暴力][二分] Jzoj P5177 TRAVEL
查看>>
[单调队列] 洛谷 P2564 生日礼物
查看>>
iOS - OC - XML 解析 - NSXMLParser
查看>>
cf837D(01背包)
查看>>
函数重载
查看>>