博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Task中的异常处理
阅读量:6839 次
发布时间:2019-06-26

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

最简单的方式

var t = new Task(() => {                throw new Exception("unknow excption");            });            t.Start();            try            {                t.Wait();            }            catch (AggregateException e)            {                foreach (var item in e.InnerExceptions)                {                    Console.WriteLine("异常类型\t{0}\n来自\t{1}\n异常内容\t{2}", item.GetType(), item.Source, item.Message);                }            }

缺点:这个会阻塞当前线程。下面是改进版

var t = new Task(() => {                throw new Exception("unknow excption");            });            t.Start();            var cat = t.ContinueWith(task =>            {                foreach (var item in task.Exception.InnerExceptions)                {                    Console.WriteLine("异常类型\t{0}\n来自\t{1}\n异常内容\t{2}", item.GetType(), item.Source, item.Message);                }            }, TaskContinuationOptions.OnlyOnFaulted); //指定只应在延续任务前面的任务引发了未处理异常的情况下才安排延续任务            Console.WriteLine("主线程退出");            Console.ReadKey();

缺点:异常没有回到主线程。继续改进

var t = new Task(() => {                throw new Exception("unknow excption");            });            t.Start();            var cat = t.ContinueWith(task =>            {                throw task.Exception;            }, TaskContinuationOptions.OnlyOnFaulted); //指定只应在延续任务前面的任务引发了未处理异常的情况下才安排延续任务            Console.WriteLine("主线程退出");            Thread.Sleep(1000);            //异常处理            try            {                cat.Wait();            }            catch (AggregateException e)            {                foreach (var item in e.InnerExceptions)                {                    Console.WriteLine("异常类型\t{0}\n来自\t{1}\n异常内容\t{2}", item.InnerException.GetType(), item.InnerException.Source, item.InnerException.Message);                }            }

 

转载地址:http://jhwul.baihongyu.com/

你可能感兴趣的文章
Spring Boot 2 (一) System Requirements
查看>>
复合索引和单一索引
查看>>
十六进制转为字符串
查看>>
shell 操作 sftp例子
查看>>
Webpack打包生成相对路径的资源引用
查看>>
varnish 4.0 官方文档翻译2-安装varnish
查看>>
速度爆快:Mac OS X上用smbpasswd改Windows domain用户密码
查看>>
2.新浪微博Swift项目第二天
查看>>
Elasticsearch最新版本2.20特性及如何安装
查看>>
Bom对象和window对象的常用方法
查看>>
Daytime协议
查看>>
Actionbar的使用
查看>>
Intellj IDEA14.0.2启动异常之3分钟修复
查看>>
C/C++深度分析
查看>>
ftp_shell ftp命令在shell中的使用
查看>>
php.ini error_reporting()函数用法
查看>>
内存模型与多线程设计-线程与虚拟机
查看>>
Tomcat下部署Solr5.3
查看>>
jQuery)扩展jQuery系列之一 模拟alert,confirm
查看>>
Android自定义控件三部曲文章索引
查看>>