繁体   English   中英

CS1998“方法缺乏等待运营商”背后的原因是什么?

[英]What is the reason behind CS1998 “method lacks await operators”

async方法缺少任何await运算符时,C#编译器会生成CS1998警告。

警告背后的原因是什么?

我知道async通过添加状态机和异常处理在方法中引入了开销。

警告性能的主要原因是什么? 或者有理由通知我,我可能已经忘记了await某个地方?

也许来自语言设计团队的人可以对这一个有所了解...... :)

(请:不要发布说“你可以删除async以使警告消失”的答案。我想知道警告背后的原因和决定,而不是解决问题的方法。)

警告背后的原因是什么?

简单地说,一个不使用awaitasync方法几乎肯定是错误的。 并非总是错误,否则这将是一个错误。 几乎总是错的,因此警告。

一个非常常见的异步 - 新手错误是假设async意味着“使这个方法异步”。 这通常与“异步”意味着“在后台线程上运行”的假设配对,但有时它只是“魔术”的假设。

因此,警告明确指出代码将同步运行。

我还发现这个重构自己的代码时警告有益的-有时我结束了一个async应改为同步方式方法,和此警告点了这一点。

如果你有非平凡的(即可能是异常生成的)同步代码并且需要实现异步方法签名,那么没有await async可能对减少代码很有用。 在这种情况下,您可以使用async来避免六行TaskCompletionSource<T>try / catch代码。 但这是一个非常小的用例; 在绝大多数情况下,警告是有帮助的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM