C#異常處理的一些經(jīng)驗(yàn)和技巧
1、什么時候該異常處理?
1)代碼最外層,如WinFrom,避免用戶看到內(nèi)部異常信息用戶體驗(yàn)不好,或者造成程序崩潰。
2)遇到異常需要恢復(fù)狀態(tài)或者重試的地方。例如連接數(shù)據(jù)庫偶然失敗了,可以有個重連機(jī)制,在Catch塊重新連接數(shù)據(jù)庫。
3)對于一系列有可能失敗的任務(wù),其中有一個任務(wù)失敗,不想影響到其他任務(wù)。例如要上傳100張圖片,不想因?yàn)橐粡垐D片上傳發(fā)生異常而失敗,進(jìn)而終止整個上傳任務(wù),僅需要記錄下失敗的圖片,提醒用戶重傳即可。
2、異常處理需要注意的地方
1)Catch和Finally代碼應(yīng)該非常短,而且成功率極高,避免自己又拋出一個異常。否則CLR會終止進(jìn)程,避免安全漏洞或者不可預(yù)知的后果。這個類似于Windows藍(lán)屏,發(fā)生了嚴(yán)重的錯誤,寧愿使系統(tǒng)不可用。
2)Catch塊盡量避免直接捕捉異常的基類Exception,而應(yīng)該捕捉具體的異常類。
3、異常處理的方法和技巧
1)是否能構(gòu)建統(tǒng)一的框架處理異常,而不用手工來處理呢?
有的人可能會問,能不能偷懶,在一個地方處理異常就行了。如果僅僅是記錄異常系統(tǒng)信息,通知到用戶,而且這些信息通常是可以缺少一些上下文的,是可以構(gòu)建同一的機(jī)制記錄異常信息的。
例如:
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本身就已經(jīng)定義了void Application_Error(object sender, EventArgs e) 來處理異常
void Application_Error(object sender, EventArgs e)
{
// 在出現(xiàn)未處理的錯誤時運(yùn)行的代碼
Exception ex = Server.GetLastError();
//處理完異常后清除異常
Server.ClearError();
}
但是很多時候,異常處理,不僅僅只是記錄到了錯誤信息就可以了,有時候是需要失敗重試或者清理資源等等,因此,僅僅靠統(tǒng)一構(gòu)建異常處理框架是不夠靈活的,因此可以一方面統(tǒng)一處理,另外一方面特殊的地方可以另外處理。
相關(guān)文章
C#實(shí)現(xiàn)動態(tài)顯示及動態(tài)移除圖片方法
這篇文章主要介紹了C#實(shí)現(xiàn)動態(tài)顯示及動態(tài)移除圖片方法,對于C#的初學(xué)者了解圖像操作有一定的幫助,需要的朋友可以參考下2014-07-07
C#實(shí)現(xiàn)獲取不同對象中名稱相同屬性的方法
這篇文章主要介紹了C#實(shí)現(xiàn)獲取不同對象中名稱相同屬性的方法,涉及C#操作類與對象屬性的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
C#中Property和Attribute的區(qū)別實(shí)例詳解
這篇文章主要介紹了C#中Property和Attribute的區(qū)別,較為詳細(xì)的分析了C#中Property和Attribute的功能、定義、區(qū)別及使用時的相關(guān)注意事項,需要的朋友可以參考下2015-06-06
C#使用RabbitMQ發(fā)送和接收消息工具類的實(shí)現(xiàn)
RabbitMQ是一個消息的代理器,用于接收和發(fā)送消息,本文主要介紹了C#使用RabbitMQ發(fā)送和接收消息工具類的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12

