![](/img/trans.png)
[英]c# async await strange warning CS1998: This async method lacks 'await' operators
[英]What is the reason behind CS1998 “method lacks await operators”
当async
方法缺少任何await
运算符时,C#编译器会生成CS1998警告。
警告背后的原因是什么?
我知道async
通过添加状态机和异常处理在方法中引入了开销。
警告性能的主要原因是什么? 或者有理由通知我,我可能已经忘记了await
某个地方?
也许来自语言设计团队的人可以对这一个有所了解...... :)
(请:不要发布说“你可以删除async
以使警告消失”的答案。我想知道警告背后的原因和决定,而不是解决问题的方法。)
警告背后的原因是什么?
简单地说,一个不使用await
的async
方法几乎肯定是错误的。 并非总是错误,否则这将是一个错误。 但几乎总是错的,因此警告。
一个非常常见的异步 - 新手错误是假设async
意味着“使这个方法异步”。 这通常与“异步”意味着“在后台线程上运行”的假设配对,但有时它只是“魔术”的假设。
因此,警告明确指出代码将同步运行。
我还发现这个重构自己的代码时警告有益的-有时我结束了一个async
应改为同步方式方法,和此警告点了这一点。
如果你有非平凡的(即可能是异常生成的)同步代码并且需要实现异步方法签名,那么没有await
async
可能对减少代码很有用。 在这种情况下,您可以使用async
来避免六行TaskCompletionSource<T>
和try
/ catch
代码。 但这是一个非常小的用例; 在绝大多数情况下,警告是有帮助的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.