c# - 为什么在不等待的方法上使用 async 修饰符时编译器不会出错?
问题描述
以下代码仅引发警告并编译正常:
async void Do() {
Console.WriteLine("Hello");
}
为什么允许非等待异步方法?没有意义。
请注意我不是在问异步等待是如何工作的,我只是想知道为什么上面的代码编译没有错误。
解决方案
编译器允许这样做是因为编译器的工作是遵循语言规范,而语言规范并没有明确排除这种情况。可以吗?也许。但是有很多明显错误的东西在语义上是合法的,因此是编译器允许的。在其中一些情况下,包括这个,编译器(或有时:内置分析器,而不是严格意义上的编译器)会发出警告以提醒您注意这一事实。所以:编译器非常清楚这不是一个很好的举措,但编译器也知道这并不是要在没有充分理由的情况下阻止你。
推荐阅读
- linux - 如何在不同的显示器中打开两个 Chrome 信息亭模式实例 (Linux)
- reactjs - 如何在每个节点上给出工具提示 react-sortable-tree
- sql - saiku mondrian 可以根据交易数据进行查询吗
- postgresql - 需要在子查询中有子查询
- python - 执行 scaler.fit_transform(X_train) 时出现值错误
- pandas - 同时转动和计数,熊猫
- xpath - 设计用于从 Google 导入第一个搜索结果的宏、正则表达式或方法
- javascript - 函数不进入else
- c# - 使用 MahApps 和 ReactiveUI 在 WPF 中进行数据验证(和绑定)
- javascript - 关于如何在draw io中获取2条线的坐标点相交的问题