[英]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.