前言
在.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“