2014-11-14 52 views
1

讓我們假設我有以下代碼...異常處理方法上的C#

try 
{ 
    await Task.Run(() => autobuyandsell.Discard_Players(client, this)); 
    if (stop == false) 
    { 
      await Task.Run(() => autobuyandsell.Buy_300_Players(client, this)); 
    } 
} 
catch (ExpiredSessionException ex) 
{ 
    relogin = true; 
    b_stop.PerformClick(); 
} 

裏面autobuyandsell我打電話一些方法可以拋出該異常可發生ExpiredSessionException。我的問題是,我是否需要在函數中添加另一個try/catch塊,或者它足以處理extern異常?

回答採納:

由於我的計劃的唯一需要的就是退出方法,並重新啓動一些變量,最後,我決定使用try/catch語句的方法之外。

+3

嗯,這完全取決於你想,如果拋出一個異常發生什麼功能。你是否希望你的(非傳統名稱,btw)'Discard_Players'和'Buy_300_Players'方法在異常之後繼續?如果是這樣,您需要在這些方法中捕獲異常。否則,你可以在調用代碼中捕獲它們。 –

+0

我道歉我的命名錯誤。我在這方面很新,所以我會盡力從開始就養成良好的習慣。回到我的問題,我想要的是退出方法一旦收到異常,所以我想我只留下方法以外的異常。 – Aldridge1991

+0

如果你想用這個try-catch來處理異常,那麼就不需要內部的try-catch塊。這將會很好。 –

回答

0

你會抓住他們,因爲你剛剛擁有它,但是你不會「知道」你的Discard_Playersbuy_300_Players代碼執行了多少,以及發生異常的時間等等,這可能是一個壞主意。

例如,如果這些方法持續狀態到磁盤/數據庫,您不會「知道」是否發生這種情況。我會一直使用「知道」的引號,因爲我猜測在捕獲異常時找出調用堆棧等是可能的,以便找出它出現在哪裏以便找到這些東西,但是這將會得到凌亂得相當快!)

如果你抓住它們內部的方法,你可以控制它們如何處理(也許撤銷之前拋出的任何數據,例如,你可以重新開始),好多了。

所以根據這兩個函數,你應該決定哪一種方法最適合你的應用