首页 > 代码库 > Task中的异常处理
Task中的异常处理
最简单的方式
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); } }
Task中的异常处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。