2015-02-10 93 views
0

我有下面的代碼位:如何防止.Wait()破壞異常?

private static void Main() 
{ 
    AsyncMain().Wait(); 
} 

private static async Task AsyncMain() 
{ 
    throw new Exception("Panic!"); 
} 

在這方面,除了將結束沒有顯示在調試器在等待()作爲骨料例外。我怎樣才能讓它出現在拋出異常的地方?

+3

轉到工具 - >異常 - >公共語言運行時異常並勾選複選框 – 2015-02-10 05:36:47

回答

0

所有異步異常都「捆綁」並拋出爲AggregateException。你原來的例外只是AggregateException的內部例外。你可以做如下處理它:

private static void Main() 
{ 
    try 
    { 
     AsyncMain().Wait(); 
    } 
    catch (AggregateException aggEx) 
    { 
     foreach (Exception ex in taskEx.InnerExceptions) 
     { 
      // Handle your original exception here. 
     } 
    } 
} 

AggregateExceptionWait時引發的原因是因爲一個異常會僅如果觀察一網打盡!這一點很重要,因爲如果你在上面的例子中沒有使用Wait,這個例外就不會發生。

如果您需要在AsyncMain中發現異常,請使用try/catch將其包圍,然後在方法中處理它,否則將始終在觀察時發現它。

如果您有空閒時間,請閱讀Sacha Barber's article series on TPL。絕對精彩。他非常好地解釋了這些概念!

+0

我不想處理我的異常。我已經知道如何做到這一點。我正在尋找的是如何獲得正確的線路中的調試器的例外。 – 2015-02-10 05:38:36

+0

@Layl,請參閱Yuval對您的問題的評論 – 2015-02-10 05:39:18

+0

道歉@Layl,請參閱讚揚的答案。 – 2015-02-10 05:42:01