C# 任务的异常和延续处理
作者:rjcql
本文主要介绍了C# 任务的异常和延续处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
写在前面
当Task在执行过程中出现异常或被取消等例外的情况时,为了让执行流程能够继续进行,可以使用延续方法实现这种链式处理;还可以针对前置任务不同的执行结果,选择执行不同的延续分支方法。子任务执行过程中的任何异常都会被传递到延续方法中进行统一处理,因此而增强了对并行任务的流程控制。
代码实现
public static void ContinueWithException() { TaskCreationOptions tco = TaskCreationOptions.AttachedToParent; Task task = Task.Factory.StartNew(() => { Task.Factory.StartNew(() => { throw new Exception(Environment.NewLine + "first exception" + Environment.NewLine); }, tco); Task.Factory.StartNew(() => { throw new Exception(Environment.NewLine + "second exception" + Environment.NewLine); }, tco); Task.Factory.StartNew(() => { throw new Exception(Environment.NewLine + "third exception" + Environment.NewLine); }, tco); }).ContinueWith(t => Console.WriteLine("Message:" + t.Exception.Message + Environment.NewLine), TaskContinuationOptions.OnlyOnFaulted); task.Wait(); Task task01 = Task.Factory.StartNew(() => { Console.WriteLine("task01 executed."); }); Task ok1 = task01.ContinueWith(t => Console.WriteLine("Ok"), TaskContinuationOptions.NotOnFaulted); Task fail1 = task01.ContinueWith(t => Console.WriteLine("Failure:" + t.Exception.Message), TaskContinuationOptions.OnlyOnFaulted); Task task02 = Task.Factory.StartNew(() => { throw new Exception("task02 executed."); }); Task ok2 = task02.ContinueWith(t => Console.WriteLine("Ok"), TaskContinuationOptions.NotOnFaulted); Task fail2 = task02.ContinueWith(t => Console.WriteLine("Failure:" + t.Exception.Message), TaskContinuationOptions.OnlyOnFaulted); }
调用结果
如图,子任务中分别抛出的三个异常信息都被传递到了延续方法中,程序依然可以继续执行;另外task01和task02分别根据执行情况进入了不同的延续分支方法
到此这篇关于C# 任务的异常和延续处理的文章就介绍到这了,更多相关C# 任务异常和延续内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!