如何解决有没有不应该抛出异常的函数?
在 C# .Net 中编程时,是否有任何函数抛出异常几乎总是“坏主意”?
在 C++ 中,从析构函数中抛出异常很少是一个好主意,因为它通常会导致程序终止。 C# .Net 中是否有类似的情况?我对异常被认为是不好的风格的情况不感兴趣。我正在寻找抛出异常通常会导致严重问题的地方。
解决方法
- 静态构造函数或类型构造函数。如果有未处理的 异常类型不会加载到应用程序域中 并且每次尝试调用它时都会返回最后一个异常。
- in the finalizer
除了提到的其他地方,我还要添加 async void
方法,特别是在第一个 await
之后。这里的问题是,如果 await 需要重新调度,那么从方法中冒出来的任何异常都可能落在意外的位置。例如。如果您使用 .ConfigureAwait(false)
等待或从后台线程调用 async void
方法,则异常将进入线程池,并直接进入未处理状态。
话虽如此,我认为只有少数地方使用 async void
是合理的,如果异常冒泡出来,那么您可能已经太晚了,无论如何都无法正确处理异常。>
Microsoft 的设计规则 CA1065(不要在意外位置引发异常)涵盖了这一点,其中规定:
不期望抛出异常的方法可以归类 如下:
- 属性获取方法
- 事件访问器方法
- 等于方法
- GetHashCode 方法
- ToString 方法
- 静态构造函数
- 终结者
- 处理方法
- 平等运算符
- 隐式转换运算符
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。