- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当 async
方法缺少任何 await
运算符时,C# 编译器会生成 CS1998 警告。
警告背后的原因是什么?
我知道 async
通过添加状态机和异常处理在方法中引入开销。
警告性能的主要原因是什么?或者是通知我我可能在某处忘记了 await
的原因?
也许语言设计团队的某个人可以阐明这一点...:)
(请:不要发布说“您可以删除 async
以使警告消失”的答案。我想知道警告背后的原因和决定,而不是解决方法.)
最佳答案
What are the reasons behind the warning?
简单地说,一个async
不使用 await
的方法几乎肯定是错误的。并非总是错误,否则这将是一个错误。但几乎总是错误的,因此发出警告。
一个非常常见的异步新手错误是假设 async
意思是“使这个方法异步”。这通常与“异步”意味着“在后台线程上运行”的假设配对,但有时它只是一个“魔法”假设。
因此,警告明确指出代码将同步运行。
我还发现这个警告在重构我自己的代码时很有用 - 有时我最终会得到一个 async
应该更改为同步方法的方法,并且此警告指出了这一点。
async
是真的没有await
如果你有非平凡的(即可能产生异常的)同步代码并且你需要实现异步方法签名,这可能有助于减少代码。在这种情况下,您可以使用 async
避免六行 TaskCompletionSource<T>
和 try
/catch
代码。但这是一个非常小的用例;绝大多数时候,警告是有帮助的。
关于c# - CS1998 "method lacks await operators"背后的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37594737/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!