【发布时间】:2021-05-11 05:41:28
【问题描述】:
在我的 ASP.NET Core 应用程序中,我创建了几个(十几个)方法
public async Task DoStuff()
{
// ...
}
所以,没有返回类型。
后来,我意识到我不小心忘记在调用者方法中到处都包含 await (显然没有 async 关键字,因为异步“僵尸病毒”还没有传播到那么远)。
在执行期间,没有任何不良后果。
问题是,当这种情况发生时,Visual Studio 会生成没有警告消息,我问自己,实际上是否存在在这种情况下忽略等待的任何危险?我知道 await 应该自然地应用于每个 async 方法,但是当调用者实际上没有要使用的返回值时,我真的不明白这背后的原因。也许有捕捉异常的东西?
我还没有找到任何明确的答案,因为一般性陈述是“简单地包含等待”。不管你信不信,我对这个 async/await 还比较陌生,它时不时地反复咬我。
【问题讨论】:
-
So, no return type- 不,返回类型是Task,而不是例如async void. -
@GSerg 抱歉,我的意思是在 async/await 术语的上下文中,因为由 Task 包装的方法不会产生返回类型。我猜应该按照我的措辞工作。
-
@GSerg 感谢您的建议,我看到斯蒂芬通过查看对#1 提供的解释部分回答了我的问题。考虑到这一点,您是否可以评论以下内容:如果我自己处理上述方法中的异常(未正确等待的异常),那么我们可以说一切都很好吗?调用者不会知道异常,是的,但它们不会完全丢失。
-
是否可以在问题中包含比
DoStuff方法更现实的示例?如果这个方法有一个名称来表明它的作用,那么回答这个问题会更容易。此外,通过显示您调用它的方式和位置将帮助我们估计省略await是否有后果,以及什么样的后果。顺便说一句,根据guidelines,DoStuff方法的名称应该是DoStuffAsync。
标签: c# .net asynchronous .net-core async-await