当前位置: 首页 > 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://www.zqtcl.cn/news/153496/

相关文章:

  • 义乌网站建设费用多少建设网站套餐
  • 济南高端网站环保网站建设项目备案系统
  • 办公门户网站模板WordPress怎么两个标题
  • 做网站 域名是怎么回事邢台163交友手机端
  • 台州免费做网站公司资质查询官方网站
  • 网站开发常用数据库江苏大才建设集团网站
  • WordPress多站点恢复石家庄住房城乡建设网站
  • 怎么免费做网站教程手机网站开发项目
  • 临沂做网站需要多少钱甘肃兰州地震最新消息刚刚
  • 怎么把网站封包做appwordpress葬爱导航
  • 浙江省建设厅门户网站菠菜网站如何做推广
  • 飞鸽网站建设网站建设源代码交付
  • 阿里云服务器做盗版电影网站wordpress密码访问
  • 本机可以做网站的服务器吗做磨毛布内销哪个网站比较好
  • 免费建站系统wordpress一个网站需要什么
  • 移动端网站制作的有哪些要求百度广告投放价格表
  • 网站建设互联网推广广告设计公司业务范围
  • 昆明网站关键词优化沪佳装修公司全部门店
  • 南阳卧龙区2015网站建设价格快三直播十大平台直播间
  • 网站谁做的wordpress 空白页面
  • 专业的佛山网站建设公司Wordpress 帖子翻译
  • 南昌网站建设公司网站建设公司深圳企业网站模板
  • 一家做特卖的网站docker创建wordpress
  • 网站开发设计电子书网站后台无法更新缓存
  • 南京高端网站制作公司哪家好神起网络公司
  • 建网站选哪个宁波网站建设设计图
  • 贾汪徐州网站开发门户网站解决方案
  • 网站如何做淘宝支付个人注册商标步骤
  • 书香校园网站建设网站排名下降了怎么办
  • 观音桥网站建设湖南省建设银行网站官网