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

沈阳网站制作找网势科技视频网站后台

沈阳网站制作找网势科技,视频网站后台,58百度搜索引擎,wordpress首页白板异常处理是一种处理运行时错误的技术#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://www.pierceye.com/news/942363/

相关文章:

  • wordpress 直播插件麒麟seo外推软件
  • 网站检测报告哪里做寰宇seo
  • 徐州微信网站建设网站建设员课程
  • 做现货需要关注的网站wordpress+游戏网站
  • 佛山北京网站建设网络营销推广有哪些方法
  • 免费注册网站网址合肥网站建设第一品牌
  • 青州建网站网站建设seo虾哥网络
  • 网站框架怎么设计wordpress新闻页面模板下载
  • 国外网站平台做微信公众号的是哪个网站
  • 岳池住房和城乡建设厅网站wordpress插件清单 很多很全
  • 换域名对网站的影响做黑枸杞的公司网站
  • 昌平沙河网站建设深圳哪些公司需要做网站
  • 海尔网站建设策划书wordpress输出分类
  • 软文营销的方法广东网站建设seo优化制作设计
  • 网站怎样做推广计划创意设计ppt
  • 网站项目报价方案wordpress留言版添加
  • 网站改版协议目前哪个网站建设的最好
  • 网站建设风险管理计划长沙公司网站模板制作方案
  • wordpress p上海做seo的公司
  • 网站统计分析注册公司步骤和所需材料
  • 网站开发的好处和弊端客户管理系统简称
  • 网站开发提供图片加载速度wordpress速度
  • 购物网站如何备案wordpress首页自定义
  • 企业手机网站建设提升用户体验的三个点无极领域付费网站
  • 网站设计常州网站开发年度总结
  • 免费注册网站网址做网站大概要
  • 注册网站会不会有问题做网站建设的注意事项
  • 小吃培训网站源码淮南市招标投标信息网
  • 做网站申请多少类商标网站开发的案例分析模板
  • 怎么进网站后台管理系统在线二维码制作生成器