Task中出现的异常AggregateException
Posted hyman2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Task中出现的异常AggregateException相关的知识,希望对你有一定的参考价值。
static void Main(string[] args) { Task t = new Task(() => { throw new Exception("任务并行编码中产生的未知异常"); }); t.Start(); try { //若有Result,可求Result t.Wait(); } catch (AggregateException e) { foreach (var item in e.InnerExceptions) { Console.WriteLine("异常类型:{0}{1}来自:{2}{3}异常内容:{4}", item.GetType(), Environment.NewLine, item.Source, Environment.NewLine, item.Message); } } Console.WriteLine("主线程马上结束"); Console.ReadKey(); }
在任何时候,异常处理都是非常重要的一个环节。多线程与并行编程中尤其是这样。如果不处理这些后台任务中的异常,应用程序将会莫名其妙的退出。处理那些不是主线程(如果是窗体程序,那就是UI主线程)产生的异常,最终的办法都是将其包装到主线程上。
在任务并行库中,如果对任务运行Wait、WaitAny、WaitAll等方法,或者求Result属性,都能捕获到AggregateException异常。可以将AggregateException异常看做是任务并行库编程中最上层的异常。在任务中捕获的异常,最终都应该包装到AggregateException中。一个任务并行库异常的简单处理示例。
以上是关于Task中出现的异常AggregateException的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark:Task not serializable异常的排查和解决