国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#異常處理的一些經驗和技巧

2020-01-24 02:44:42
字體:
來源:轉載
供稿:網友

1、什么時候該異常處理?
1)代碼最外層,如WinFrom,避免用戶看到內部異常信息用戶體驗不好,或者造成程序崩潰。
2)遇到異常需要恢復狀態或者重試的地方。例如連接數據庫偶然失敗了,可以有個重連機制,在Catch塊重新連接數據庫。
3)對于一系列有可能失敗的任務,其中有一個任務失敗,不想影響到其他任務。例如要上傳100張圖片,不想因為一張圖片上傳發生異常而失敗,進而終止整個上傳任務,僅需要記錄下失敗的圖片,提醒用戶重傳即可。
2、異常處理需要注意的地方
1)Catch和Finally代碼應該非常短,而且成功率極高,避免自己又拋出一個異常。否則CLR會終止進程,避免安全漏洞或者不可預知的后果。這個類似于Windows藍屏,發生了嚴重的錯誤,寧愿使系統不可用。
2)Catch塊盡量避免直接捕捉異常的基類Exception,而應該捕捉具體的異常類。
3、異常處理的方法和技巧
1)是否能構建統一的框架處理異常,而不用手工來處理呢?
有的人可能會問,能不能偷懶,在一個地方處理異常就行了。如果僅僅是記錄異常系統信息,通知到用戶,而且這些信息通常是可以缺少一些上下文的,是可以構建同一的機制記錄異常信息的。

例如:
WinFrom的Application對象本身就提供了ThreadException時間來捕捉為處理的異常

復制代碼 代碼如下:

static void Main()
    {
      //注冊捕捉異常事件
      Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
    }
    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
      Exception ex = e.Exception;
      //做一些極其簡單的記錄異常信息操作
    }

又例如:
WebFrom的Global.asax本身就已經定義了void Application_Error(object sender, EventArgs e) 來處理異常
復制代碼 代碼如下:

void Application_Error(object sender, EventArgs e)
    {
      // 在出現未處理的錯誤時運行的代碼
      Exception ex = Server.GetLastError();
      //處理完異常后清除異常
      Server.ClearError();
    }

但是很多時候,異常處理,不僅僅只是記錄到了錯誤信息就可以了,有時候是需要失敗重試或者清理資源等等,因此,僅僅靠統一構建異常處理框架是不夠靈活的,因此可以一方面統一處理,另外一方面特殊的地方可以另外處理。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景宁| 习水县| 军事| 乐亭县| 巩留县| 金堂县| 方正县| 繁峙县| 横峰县| 达孜县| 双江| 漾濞| 小金县| 静海县| 射阳县| 忻州市| 鲜城| 青海省| 浠水县| 梅州市| 玛纳斯县| 陇川县| 武乡县| 廉江市| 夏河县| 拜城县| 阜新市| 夏津县| 东莞市| 仙居县| 禹城市| 古蔺县| 黄冈市| 云和县| 平谷区| 侯马市| 巢湖市| 弥渡县| 红桥区| 大城县| 灌南县|