前言

在.NET Core 中已经广泛使用异步编程,代码中充斥着大量的 async 和 await 关键字。

但有时候,调用一个异步方法时可能会忘了写 await。

这会造成什么问题呢?

问题重现

示例代码如下:

[HttpGet]
public async Task<IEnumerable<WeatherForecast>> Get()
{Demo();...
}private async Task Demo()
{await Task.Run(() =>{Console.WriteLine("My IO");throw new InvalidOperationException();});
}

调用Demo方法时没有加上 await 关键字。

在命令行下启动 API 并访问,发现 API 可以正常返回,控制台也有输出,但是却没有任何异常提示:

因此,你可能认为Demo方法执行成功了,其实并没有。

解决方案

1.将警告视为错误

其实,VS 已经发现了问题,但是只是提出了警告:

打开项目的属性窗口,在生成面板中找到“将警告视为错误”的选项,可以将其设置为所有,或者特别指定错误的编号:

再次编译,就会编译失败了。

2.分析器

你也可以使用专门的分析器来检查这类错误。

首先,引用 Nuget 包 Lindhart.Analyser.MissingAwaitWarning

然后,找到对应的分析器,设置“严重性”为“错误”:

再次编译,就会编译失败了。

结论

现在,可以保证,执行异步方法时不会遗漏 await 关键字了。

想了解更多内容,请关注我的个人公众号”My IO“

如何保证执行异步方法时不会遗漏 await 关键字相关推荐

  1. 在编写异步方法时,使用 ConfigureAwait(false) 避免使用者死锁

    我在 使用 Task.Wait()?立刻死锁(deadlock) 一文中站在类库使用者的角度看 async/await 代码的死锁问题:而本文将站在类库设计者的角度来看死锁问题. 阅读本文,我们将知道 ...

  2. hibernate先删除数据,紧接着执行插入时的异常解决之道——中间不能调用flush()、clear()等方法...

    hibernate先删除数据,紧接着执行插入时的异常解决之道--中间不能调用flush().clear()等方法 项目中包含这样一个寻常的业务:为某一个用户指定用户群.一个用户可以被分配到多个用户群中 ...

  3. LeetCode1117. Building H2O --Java解法--多线程保证执行顺序--AtomicInteger

    此文首发于我的个人博客:LeetCode 1117. Building H2O --Java解法–多线程保证执行顺序–AtomicInteger - zhang0peter的个人博客 LeetCode ...

  4. python3.6执行pip3时 Unable to create process using ''

    背景: 由于在windows操作系统中已经安装了python2.7,之前安装过python3.4,现已卸载, 将python3.6安装在C:\Python36目录下 然后进入C:\Python36目录 ...

  5. [Issue Fixed]-执行脚本时出现invalid option错误

    在执行脚本时,出现了: invalid option 错误 最后在stackoveflow上找到了答案 You script probably has characters in it that yo ...

  6. sql server在执行批处理时出现错误。错误消息为: 目录名无效

    今天在客户服务器上的sql server上执行脚本,报错提示"在执行批处理时出现错误.错误消息为:目录名无效",第一反应就是客户是不是在服务器装了360,因为之前有类似问题,360 ...

  7. 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)?

    1.面试题 如何保证消息不被重复消费啊(如何保证消息消费时的幂等性)? 2.面试官心里分析 其实这个很常见的一个问题,这俩问题基本可以连起来问.既然是消费消息,那肯定要考虑考虑会不会重复消费?能不能避 ...

  8. 如何保证用户登陆时提交密码已经加密

    如何保证用户登陆时提交密码已经加密?密码是否已加密,需要客户端和服务端建立约定,双方按约定办事就行了. 这里提到的另一个问题是,如何保证传输安全? 最理想的方案当然是走 HTTPS 协议. HTTPS ...

  9. SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. css内边距与外边距的区别
  2. 微信notify mysql_微信支付的notify.php中如何获取订单号(php版)
  3. python——函数 10、函数的嵌套
  4. LINUX 文件系统如何存储文件 图解
  5. Spring boot (5):Spring data jpa 的使用
  6. Android官方开发文档Training系列课程中文版:APP的内存管理
  7. facebook快捷登录 pc_华为发布首款商用台式机,商用PC布局更进一步
  8. 智慧讲台必须支持的协议
  9. Windows+Python3.7下自动生成requirements.txt文件
  10. Parallels Desktop虚拟机如何安装win10和win11,懒人安装教程
  11. Java垃圾回收机制——回收对象
  12. 南京大学人工智能学院教授俞扬:我的牛年小结
  13. 网络抓包与HTTP协议(采用wireshark、Fiddler抓包软件)
  14. 基于设备树的TQ2440触摸屏驱动移植
  15. android中点击空白处隐藏软键盘
  16. CBI 图解机器人创业公司投资热点
  17. java中io流,Reader和Writer,InputStream和OutputStream,转换流 InputStreamReader 和 OutputStreamWriter
  18. vsCode安装使用教程和插件安装
  19. 我为什么反对提“全栈工程师”?
  20. 「力扣数据库」183. 从不订购的客户(第五天)

热门文章

  1. java eleven进度条
  2. 移动web开发(三)——字体使用
  3. 移动web开发(一)——移动web开发必备知识
  4. iOS应用开发的五个Java开源工具
  5. DDD:如何更好的使用值对象
  6. 世界十大无法科学解释灵异事件(进来发表自己看发)
  7. Windows下的HEAP溢出及其利用
  8. C#写的WebServices可运行于树莓派
  9. RabbitMQ 入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)
  10. python自动化测试-D6-学习笔记之一(常用模块补充datetime模块)