2009-04-29 71 views
1

我在我的一個類中有以下代碼。這個類的目的是爲了從Web服務器獲得平衡。以防萬一出現了平衡問題。我會處理一個例外。但是,這一切都很容易。但是我仍然想知道我的聲明中會回覆什麼。C#從異常句柄返回一些東西

大部分我看着例子只是寫來使用控制檯:

Console.WriteLine(ex.Message); 

這是所有非常好。但是在實際應用中,大多數開發人員做什麼?

//Download only when the webclient is not busy. 
     if (!wc.IsBusy) 
     { 
      // Sleep for 1/2 second to give the server time to update the balance. 
      System.Threading.Thread.Sleep(500); 

      try 
      { 
       // Download the current balance. 
       wc.DownloadStringAsync(new Uri(strURL)); 
      } 
      catch (WebException ex) 
      { 
       Console.Write("GetBalance(): " + ex.Message); 
      } 
     } 
     else 
     { 
      Console.Write("Busy please try again"); 
     } 

我的函數此刻返回void。我只是想知道如果Web客戶端忙碌,我還會返回什麼?

非常感謝任何建議,

回答

14

如果你不能處理它,不要捕捉異常。如果您僅返回某個值,則調用方法必須檢查該值是實際結果還是僅指示異常。現在這個方法必須決定要做什麼並返回。並調用此方法的方法。和方法...

所以,只要讓異常向上冒泡堆棧,並抓住它的地方,你可以處理它。也許直接在用戶界面下面,然後顯示一個消息框,詢問用戶是否想要重試或顯示信息如何解決問題。如果您沒有用戶界面,請將其放在可以解決問題並重試的地方。如果這是一個暫時的問題,請在合理的水平重試整個任務,直到通話成功。

如果您想記錄某些內容,請使用以下模式記錄重新拋出它的異常。

try 
{ 
    DoStuff(); 
} 
catch (Exception exception) 
{ 
    Log(exception.ToString()); 

    throw; 
} 

請注意,這是throw;而不是throw exception;。如果你在後面做,你會失去原始的堆棧跟蹤。如果您可以推斷有關異常原因的更多詳細信息,則應該使用附加信息將捕獲到的異常包裝爲更有意義的異常。

try 
{ 
    DoStuff(); 
} 
catch (SpecificMeaninglessException exception) 
{ 
    Log(exception.ToString()); 

    throw new MeaningfulException("Details about the error.", exception); 
} 
catch (Exception exception) 
{ 
    Log(exception.ToString()); 

    throw; 
} 
1

如果客戶是繁忙,但等待重試前的某個時間你可以重新運行的方法? x重試後可能會失敗。

如果您希望繼續前進並簡單地記錄問題,則您的catch語句可以將異常記錄到基於文件的日誌,事件查看器,提交到數據庫,引發警報(電子郵件,短信等)if有必要。

+0

如果每個方法都實現了延遲 - 重試循環,則將它們嵌套三個深度,並且您已經嘗試了重試的次數。這樣做很危險。 – 2009-04-29 02:25:55

3

您應該使用ex.ToString()方法

Exception.Message 包含異常的簡單描述(例如 「對象未設置...」)。

Exception.ToString() 包含對異常的描述以及完整的堆棧跟蹤。

Exception Handling Best Practices in .NET

1

如果你只在觀看你應該重新例外拋出異常所以誰的一次是在處理它仍然會得到它計劃感興趣。

1

你當然不想掩蓋未處理的異常。讓它通過堆棧起泡。但是如果你在網絡客戶端忙時要求返回什麼, 如果返回一個隨機時間間隔或函數調用者在嘗試再次下載餘額之前應該等待的一些有意義的時間間隔?隨機數可以分配負載或以其他方式緩解碰撞問題。根據服務器的當前狀態可以發回更有意義的時間間隔。

相關問題