观察和并迭代不同任务的未处理异常

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
 
*/

 

posted @ 2016-09-06 12:44  茗::流  阅读(105)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。