摘要:Async Method與Exception

  • 851
  • 0

摘要:Async Method與Exception

第一、在方法內部的程式碼可以有一個以上的await。

第二、只要方法內部的程式碼包含await,方法的前方就必須有async修飾。

第三、await expression意指將await運算子套用在Task或者Task<TResult>之前。

第四、await不可已出現在例外處理的Catch區塊或者Finally區塊中。

第五、當程式碼已經被執行至async方法的內部時,遇到await會暫停方法的執行,並且先執行await之後的非同步方法,待await之後的非同步方法執行完畢與傳回Task或者Task<TResult>之後,再解除之前的暫停執行,並且由之前暫停點繼續執行。

第六、倘若在前一行程式碼中,將非同步方法回傳的Task或者Task<Result>先指定給予一個暫時的Task或者Task<TResult>,然後在下一行的程式碼中,運用await expression將await運算子套用在前一行的暫時的Task或者Task<TResult>,則必須使用Try區塊才能捕捉Task或者Task<TResult>的例外訊息。

第七、在Task.WhenAll()中,僅能捕捉到一個例外,而且無法事先預測可以捕捉到哪一個例外。

第八、Task的屬性IsCanceled設為True,或者屬性IsFaulted設為True時,皆會拋出例外,IsCanceled設為True代表取消作業,IsFaulted設為True代表發錯誤。

 

參考資料:

[1]try-catch (C# Reference)
http://msdn.microsoft.com/en-us/library/0yd65esw.aspx