[英]Are there any functions that should not throw exceptions?
在 C#.Net 中编程时,是否有任何函数抛出异常几乎总是一个“坏主意”?
在 C++ 中,从析构函数中抛出异常很少是一个好主意,因为它通常会导致程序终止。 C#.Net中是否有类似情况? 我对异常被认为是不好的风格的情况不感兴趣。 我正在寻找抛出异常通常会导致严重问题的地方。
除了提到的其他地方,我会添加async void
方法,特别是在第一个await
之后。 这里的问题是,如果 await 需要重新安排,那么任何从方法中冒出的异常都可能出现在意外的位置。 例如。 如果您使用.ConfigureAwait(false)
等待,或者如果从后台线程调用async void
方法,则异常将落在线程池中,并直接路径变为未处理。
话虽如此,我认为只有少数地方使用async void
是合理的,如果出现异常,那么您可能已经为时已晚,无法正确处理异常。
Microsoft 的设计规则CA1065 (不要在意外位置引发异常)涵盖了这一点,其中指出:
预计不会抛出异常的方法可以分类如下:
- 属性获取方法
- 事件访问器方法
- 等于方法
- GetHashCode 方法
- ToString 方法
- Static 构造函数
- 终结者
- 处置方法
- 等式运算符
- 隐式转换运算符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.