關於async & await(TAP)異步模型的異常捕獲

在TAP以前,若要捕獲線程中Task的異常,一般有兩種辦法:函數

一、阻塞:線程開始後,在適當的時機,調用 wait,或waitAll方法。線程

二、非阻塞(推薦):在創建任務的時候,寫該task的continueWith方法,在該方法中捕獲異常。it

對於TAP時代,咱們若要捕獲一個帶有asyn關鍵字的Task任務,用continueWith方法會捕獲失敗。註冊全局的靜態方法也不行。程序

阻塞式:和TAP以前一致。方法

非阻塞式:用異常

await Task.WhenAll()co

await t.Wait()阻塞

await t.result等皆可。非阻塞

  前提是要有await關鍵字,這樣看似不錯,省了continueWith,可是問題是await只容許在asyn標誌的函數中去執行,這樣會給你的程序帶來傳染性問題。註冊

由此能夠這樣說,await關鍵字其實和continueWith的做用相似,只是簡化了寫法,讓程序看的更整齊,但這樣所付出的代價是否是有點大?

相關文章
相關標籤/搜索