2012-07-31 61 views
0

在BackgroundWorker的DoWork事件處理程序中調用此代碼,我創建一個WCF客戶端並在try塊中使用它,如果在處理程序返回之前發生異常,我想中止並重試5次。嵌套try/catch。好嗎?

private void WorkerDoWork(object sender, DoWorkEventArgs e) 
    {    
     var mmc = new ServiceClient(); 

     try 
     { 
      e.Result = mmc.SubmitData(measure); 
     } 
     catch (Exception) 
     { 
      mmc.Abort(); 

      mmc = new ServiceClient(); 

      var counter = 0; 

      while ((bool)e.Result == false && counter++ < 5) 
      { 
       try 
       { 
        e.Result = mmc.SubmitData(measure); 
       } 
       catch (Exception) 
       { 
        mmc.Abort(); 
        mmc = new ServiceClient(); 
       } 
      } 
     } 
     finally 
     { 
      if (mmc.State == CommunicationState.Faulted) 
      { 
       mmc.Abort(); 
      } 
      else 
      { 
       mmc.Close(); 
      } 
     } 
    } 

我沒有與代碼真的開心,感覺就像是東西腥吧!特別是嵌套的try/catch。

代碼無效鏈接。或者我應該重構它?

回答

2

是的,我同意盲目地敲擊Web服務是個問題。

很高興知道您可以處理哪些可能的例外情況。

這看起來像你只是處理一個無法訪問的端點,而不是你可以獲得有關數據格式,類型,限制,限制,身份驗證失敗,帳戶使用限制點擊,ANYTHING!

但eveything被視爲重試會解決它,如果它不,它已經破產!

如何報告遇到的問題?

作爲一名優秀的程序員,您應該瞭解哪些情況會引發異常,並以適當的方式處理它們(如果可以的話)。
如果你不能處理它們,那麼將它們報告給日誌或用戶(如果它是交互式的)。