观察和并迭代不同任务的未处理异常
using System; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Test { class Program { public static string DateTime_Now_ToString() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } private static void TaskMehodA() { Thread.Sleep(TimeSpan.FromSeconds(1)); throw new AggregateException("TaskA Exception"); } private static void TaskMehodB() { Thread.Sleep(TimeSpan.FromSeconds(2)); throw new NullReferenceException("TaskB Exception"); } private static void TaskMehodC() { Thread.Sleep(TimeSpan.FromSeconds(3)); throw new FormatException("TaskC Exception"); } private static CancellationTokenSource cts = new CancellationTokenSource(); /// <summary> /// 观察和并迭代不同任务的未处理异常 /// </summary> static void Main() { Console.WriteLine("当前时间:{0}\n", DateTime_Now_ToString()); try { Task taskA = Task.Factory.StartNew(TaskMehodA); Task taskB = Task.Factory.StartNew(() => TaskMehodB()); Task taskC = Task.Factory.StartNew(() => { TaskMehodC(); }, cts.Token, TaskCreationOptions.PreferFairness, TaskScheduler.Default); Task taskD = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); throw new InvalidOperationException("TaskD Exception"); }); Task taskE = new Task(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); throw new InvalidOperationException("TaskE Exception"); }); taskE.Start(); Task.WaitAll(taskA, taskB, taskC, taskD, taskE); } catch (AggregateException ex) { StringBuilder builder = new StringBuilder(); builder.AppendLine("任务异常信息:"); foreach (var item in ex.InnerExceptions) { builder.AppendLine(String.Format("{0},{1}", item.Message, DateTime.Now.ToString())); } Console.WriteLine(builder.ToString()); } Console.WriteLine("\n执行完成" + DateTime_Now_ToString()); Console.ReadLine(); } } }
打印运行结果:
/* 当前时间:2016-08-31 23:24:44 任务异常信息: TaskA Exception,2016/8/31 23:24:47 TaskB Exception,2016/8/31 23:24:47 TaskC Exception,2016/8/31 23:24:47 TaskD Exception,2016/8/31 23:24:47 TaskE Exception,2016/8/31 23:24:47 执行完成2016-08-31 23:24:47 */

浙公网安备 33010602011771号