C# 异步方法的异常处理

431982bc167826ee010b5e10521b55da.png

在使用异步方法时,应该知道错误的一些特殊处理方式。所有 ErrorHandling 示例的代码都使用了如下名称空间:

System

System.Threading.Tasks

从一个简单的方法开始,它在延迟后抛出一个异常:

static async Task ThrowAfter(int ms, string message) 
{await Task.Delay(ms);throw new Exception(message);
}

如果调用异步方法,并且没有等待,可以将异步方法放在 try/catch 块中,就会捕获不到异常。这是因为 DontHandle 方法在 ThrowAfter 抛出异常之前,已经执行完毕。需要等待 ThrowAfter 方法,如下一节的示例所示。注意这个代码片段不会抛出异常:

private static void DontHandle()
{try{ThrowAfter(200, "first");// exception is not caught because this method is finished// before the exception is thrown}catch (Exception ex){Console.WriteLine(ex.Message);}
}

警告

返回 void 的异步方法不会等待。这是因为从 async void 方法抛出的异常无法捕获。因此,异步方法最好返回一个 Task 类型。处理程序方法或重写的基类方法不受此规则限制。

异步方法异常的一个较好处理方式是使用 await 关键字,将其放在 try/catch 语句中,如以下代码块所示。异步调用 ThrowAfter 方法后,HandleOneError 方法就会释放线程,但它会在任务完成时保持任务的引用。此时(2s 后,抛出异常),会调用匹配的catch 块内的代码:

private static async void HandleOneError()
{try{await ThrowAfter(2000, "first");}catch (Exception ex){Console.WriteLine($"handled {ex.Message}");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 创建日志文件,oracle创建日志文件

一团网资讯一团资讯 > oracle > oracle创建日志文件oracle创建日志文件2018-04-14 15:39:48 发布者:来源网络创建日志文件的语法如下:alter database database_name add logfile[group group_number](file_name[,file_name[,...]])[SIZE numbe…

Mark Down 使用实例

为什么80%的码农都做不了架构师?>>> Mark Down 使用实例 MarkDown是一个非常轻量级的 【标记语言】,有点有很多,书写比较快速,学习成本低,统一的排版模式,可导出 PDF HTML 等文档格式&#xff…

Android之在后台不显示activity方法

1、设置excludeFromRecents Androidmanifest.xml,设置Activity的属性:Android:excludeFromRecents"true"true时不显示;false默认显示。 2、start activity intent flag startactivity的时候用intent flag:FLAG_ACTIVITY_EXCLUDE_FR…

教育管理系统——android家长客户端

最近做了一个android的小项目,服务器端已经搭建好了,使用了spring MVC作为后端技术,发布了一系列web接口来接受客户端提交的数据和返回客户端请求的数据,web端使用了ext js来作为前端技术。同时还需要一个android客户端和ios客户端…

JoySSL付费版证书的优势

JoySSL付费版证书相比免费版有很多优势。首先,付费版证书通常由权威的CA(证书颁发机构)签发,在浏览器和操作系统中具有99.99%的兼容性,被主流浏览器如Chrome、Firefox、Safari和Edge等广泛支持和认可。这确保了无论用户…

Git命令集十三——快照操作

2019独角兽企业重金招聘Python工程师标准>>> Git命令集十三——快照操作 Git工具中提供了一个stash命令,这个命令的作用是创建快照。快照主要的用途是将当前未更新到缓存区的修改进行入栈保存,创建快照后,Git的状态会变回上一次提…

Asp.net core IdentityServer4与传统基于角色的权限系统的集成

img写在前面因为最近在忙别的,好久没水文了 今天来水一篇;在学习或者做权限系统技术选型的过程中,经常有朋友有这样的疑问 :“IdentityServer4的能不能做到与传统基于角色的权限系统集成呢?”“我的公司有几百个接口&a…

oracle 快捷 企业,Oracle自治数据库提供APEX 20.1,助企业快速构建应用

Oracle自治数据库(Oracle Autonomous Database)现已提供Oracle APEX 20.1,Oracle Application Express(APEX)是一个低代码应用开发平台,随附在所有Oracle数据库当中,企业也可以通过所有Oracle数据库云服务来使用,包括Oracle自治数…

【转】CSS样式覆盖规则

大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义。其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值&#xff0c…

C之memset、memcpy、strcpy、strncpy区别

1 memset memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’, memset可以方便的清空一个结构类型的变量或数组。 char a[100]; memset(a, \0, sizeof(a)); struct student {char name[16];int age; }; struct student s…

Cachefiled

NFS不同共享客户端间的数据不同步 问题现象 当您用台ECS挂载同一个NFS文件系统,在ECS-A上append写文件,在ECS-B用tail -f观察文件内容的变化。在ECS-A写完之后,在ECS-B看到文件内容变化会有10-30秒的延时。然而相同的场景下,如果直…

算法小白——基本排序算法入门

计算的 时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n log n),且坏的性能是O(n^2)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序…

使用Dynamic LINQ创建高级查询服务

前言在以前的文章中,我们介绍了使用AutoFilterer.Generators创建高级查询服务。但是,AutoFilterer.Generators只能提供简单的范围筛选:今天,我们介绍如何使用Dynamic LINQ轻松实现更强大的高级查询服务。Demo创建ASP.NET Core Web…

php框架中uri路由机制,URI 路由 — CodeIgniter 3.1.5 中文手册|用户手册|用户指南|中文文档...

URI 路由一般情况下,一个 URL 字符串和它对应的控制器中类和方法是一一对应的关系。URL 中的每一段通常遵循下面的规则:example.com/class/function/id/但是有时候,你可能想改变这种映射关系,调用一个不同的类和方法,而不是URL 中…

线程池的开源实现(mariadb和percona版本)

2019独角兽企业重金招聘Python工程师标准>>> 一、"Thread pool in MariaDB 5.5" 线程池解决的问题: 传统mysql使用一个线程处理一个客户端连接,如果许多的并发用户,将使性能下降。因为大量的线程将引起上下文交换&#…

C++之goto

1 goto code: result:

表单-登陆框

一、实现登陆框 1、用到【form】【caption】【table】【method】 2、用户名 <input type"text" name"uername"> 3、密码 <input type"password" name"mima"> 4、注册 <td aling"center" colspan"1"…

[译]9条关于高性能ElasticSearch的配置建议

原文链接:https://www.loggly.com/blog/nine-tips-configuring-elasticsearch-for-high-performance/Loggy使用ES作为其很多核心功能的搜索引擎. 如Jon Gifford在最近的文章ElasticSearch vs Solr中所述, 日志管理系统对搜索引擎有特别需求, 具体如下: 对于大规模的数据索引具有…

ABP vNext微服务架构详细教程——结束语

ABP vNext微服务架构详细教程——简介ABP vNext微服务架构详细教程——架构介绍ABP vNext微服务架构详细教程——身份管理服务ABP vNext微服务架构详细教程——基础服务层ABP vNext微服务架构详细教程——聚合服务ABP vNext微服务架构详细教程——身份认证服务ABP vNext微服务架…

创建 linux分区命令,Linux中创建分区

在很多情况下我们可能需要在使用Linux的时候创建新的分区来帮助我们更好的学习和工作&#xff0c;接下来我就详细的介绍一下如何利用fdisk这条命令进行硬盘分区。Linux磁盘分区和windows存在区别&#xff0c;Linux分区分为三类 主分区 扩展分区 和逻辑分区。然而它们三个关系有…