当前位置: 首页 > news >正文

江阴网站开发公司涉县做网站

江阴网站开发公司,涉县做网站,微信 公众号平台,济南网站建设公司排行异常处理是一种处理运行时错误的技术#xff0c;而 异步编程 允许我们在处理资源密集型的业务逻辑时不需要在 Main 方法或者在 执行线程 中被阻塞#xff0c;值得注意的是#xff0c;异步方法和同步方法的异常处理机制是不一样的#xff0c;本篇我们就来讨论下如何在异步方… 异常处理是一种处理运行时错误的技术而 异步编程 允许我们在处理资源密集型的业务逻辑时不需要在 Main 方法或者在 执行线程 中被阻塞值得注意的是异步方法和同步方法的异常处理机制是不一样的本篇我们就来讨论下如何在异步方法中处理异常。异步方法 VS 同步方法 的异常处理 在同步代码中抛出异常它会一直以冒泡的方式往上抛直到遇到可以处理这个异常的 catch 块为止可以想象异步方法中的异常抛出肯定要比这个复杂。大家都知道 异步方法 可以有三种返回类型如void, Task, TaskTResult当异常方法的返回值是 Task TaskTResult 的方法中抛出异常的话这个异常对象会被塞到 AggregateException 对象中然后包裹在 Task 中进行返回有些朋友可能要问如果异步方法中抛出了几个异常怎么办其实也是一样的道理这些异常对象都会被塞到 AggregateException 中通过 Task 去返回。最后如果异常出现在返回值为 void 的异步方法中异常是在调用这个异步方法的 SynchronizationContext 同步上下文上触发。返回 void 异步方法中的异常 下面的程序展示了返回 void 的异步方法中抛出了异常。class Program{static void Main(string[] args){ThisIsATestMethod();Console.ReadLine();}public static void ThisIsATestMethod(){try{AsyncMethodReturningVoid();}catch (Exception ex){Console.WriteLine(ex.Message);}}private static async void AsyncMethodReturningVoid(){await Task.Delay(1000);throw new Exception(This is an error message...);}}从图中可以看到AsyncMethodReturningVoid 方法抛出的异常会被包裹此方法的 try catch 捕捉到。返回 Task 的异步方法异常 当异常从返回值为 Task 的异步方法中抛出这个异常对象会被包裹在 Task 中并且返回给方法调用方当你用 await 等待此方法时只会得到一组异常中的第一个被触发的异常如果有点懵的话如下代码所示class Program{static void Main(string[] args){ExceptionInAsyncCodeDemo();Console.ReadLine();}public static async Task ExceptionInAsyncCodeDemo(){try{var task1  Task.Run(()  throw new IndexOutOfRangeException(IndexOutOfRangeException is thrown.));var task2  Task.Run(()  throw new ArithmeticException(ArithmeticException is thrown.));await Task.WhenAll(task1, task2);}catch (AggregateException ex){Console.WriteLine(ex.Message);}catch (Exception ex){Console.WriteLine(ex.Message);}}}从上面代码中可以看出 task1 和 task2 都会抛出异常但在 catch 块中只捕获了 task1 中的异常这就说明返回值为 Task 的多个异常的方法中调用方只能截获第一次发生异常的异常对象。使用 Exceptions 属性 获取所有异常 要想获取已抛出的所有异常可以利用 Task.Exceptions 属性来获取下面的代码清单展示了如何在返回 Task 的方法中获取所有的异常信息。class Program{static void Main(string[] args){ExceptionInAsyncCodeDemo();Console.ReadLine();}public static async Task ExceptionInAsyncCodeDemo(){Task tasks  null;try{var task1  Task.Run(()  throw new IndexOutOfRangeException(IndexOutOfRangeException is thrown.));var task2  Task.Run(()  throw new ArithmeticException(ArithmeticException is thrown.));tasks  Task.WhenAll(task1, task2);await tasks;}catch{AggregateException aggregateException  tasks.Exception;foreach (var e in aggregateException.InnerExceptions){Console.WriteLine(e.GetType().ToString());}}}}使用 AggregateException.Handle 处理所有异常 你可以利用 AggregateException.Handle 属性去处理一组异常中的某一个同时忽略其他你不关心的异常下面的代码片段展示了如何去实现。class Program{static async Task Main(string[] args){await ExceptionInAsyncCodeDemo();Console.Read();}public static async Task ExceptionInAsyncCodeDemo(){Task tasks  null;try{var task1  Task.Run(()  throw new IndexOutOfRangeException(IndexOutOfRangeException is thrown.));var task2  Task.Run(()  throw new ArithmeticException(ArithmeticException is thrown.));tasks  Task.WhenAll(task1, task2);await tasks;}catch(AggregateException ex){AggregateException aggregateException  tasks.Exception;foreach (var e in aggregateException.InnerExceptions){Console.WriteLine(e.GetType().ToString());}}}}上面的代码片段表示IndexOutOfRangeException 会被处理, InvalidOperationException 会被忽略。最后想说的是你可以利用 异步编程 来提高程序的扩展性和吞吐率当你在使用异步方法时请注意在异步方法中的异常处理语义和同步方法中的异常处理是不一样的。译文链接https://www.infoworld.com/article/3453659/how-to-handle-exceptions-in-asynchronous-code-in-c.html
http://wiki.neutronadmin.com/news/337004/

相关文章:

  • 响应式网站要多久南京高淳开展规模性核酸检测
  • 开通公司网站怎么做分录在线教育网站开发经验简历填写
  • 深圳广告网站设计制作树莓派怎么打开 wordpress
  • 深圳网站建设开发公司导视设计原则
  • 网站颜色 字体株洲网站建设方案
  • 繁体企业网站源码cms开源系统php
  • 做互助盘网站互联网公司注册
  • 大连哪家公司做网站比较好淘客推广
  • 网站开发流程主要分成什么企业电子商务网站的建设阶段
  • 怎么在线上推广自己的产品seo外包优化网站 sit
  • 机械厂网站建设方案网站在哪里购买
  • 封面型网页网站有哪些启东做网站
  • 有框架有模板怎么做网站山东大良网站建设
  • 怎么查网站的icp备案cherry framework wordpress
  • 怎样做外贸网站网站首页一般做多大
  • 河南网站建设平台徐汇网站推广
  • 网站宝建站网站备案密码重置申请表
  • 深圳网站开发奇辰科技电商打单软件排名
  • 做网站如何收费网站设计方面有什么公司
  • 外贸网站源代码宿迁房产查询网上查询系统
  • 如何将域名和网站绑定域名wordpress 上传文件
  • 做自己的程序设计在线测评网站大学城网站开发公司电话
  • 云浮源峰网站建设工作室地址如何查网站是织梦做的
  • 古典网站案例网站建设软件哪个最好
  • 怀化网站优化推荐德阳网站建设公司
  • 免费代理上网网站wordpress管局备案
  • 贵阳市城乡建设学校网站企业腾讯邮箱入口
  • 网站建设顶层设计一键lnmp搭建wordpress
  • 做seo要明白网站内容乃重中之重正规的网站建设学习网
  • 石家庄制作网站公司有哪些网站如何改首页模块