.NET Framework提供了異步操做的三種模式:編程
基於任務的異步模式(Task-based Asynchronous Pattern,TAP)使用一個方法來表示異步操做的啓動和完成。TAP是在.NET Framework4中引入的,而且它是.NET Framework中進行異步編程推薦使用的方法。C#中使用async與await關鍵字爲TAP添加了語言的支持。數據結構
TAP是基於命名空間中的System.Threading.Tasks.Tassk
命名空間中的System.Threading.Tasks.Task
和System.Threading.Tasks.Task<TRresult>
類型,這些類型用於表示任意的異步操做。異步
TAP 中的異步方法在操做名稱後包含 Async 後綴;例如,get 操做的 GetAsync。 若是你正在將 TAP 方法添加到已包含具備 Async 後綴的方法名稱的類中,請改用後綴 TaskAsync。 例如,若是類具備 GetAsync 方法,請使用名稱 GetTaskAsync。async
TAP 方法返回System.Threading.Tasks.Task
或 System.Threading.Tasks.Task<TResult>
,取決於相應的同步方法是返回 void 仍是類型 TResult。異步編程
TAP方法的參數不能是out與ref的。應將經過out或ref參數返回的全部數據改成做爲Task
在某些狀況下,完成操做所須要的工做量要比異步啓動操做所需的工做量少。讀取流時,按照在內存中已緩衝好的數據來知足讀取,這類情形下操做可能會同步完成,同時返回已完成的任務。對象
TAP中,取消是異步方法實現者和異步方法使用者的選項。若是操做容許取消,則會公開接受取消標記(CancellationToken 實例)的異步方法的重載。 按照約定,該參數命名爲 cancellationToken。該異步操做監視取消請求的此標記。若是它收到取消請求,則能夠選擇接受該請求並取消操做。若是取消請求到時過早的結束工做,則TAP方法返回一個Canceled狀態下結束的任務,沒有可用結果且不引起異常。Canceled狀態被視爲任務最終(完成)狀態。所以,若是一個任務處於 Canceled 狀態,則其 IsCompleted 屬性將返回 true。事件
某些異步操做可能須要進度通知。與取消一下,僅在API支持進度同時,TAP實現才應提供IProcess
在計算密集型任務中,若是系統在開始運行任務以前收到取消請求,則它能夠防止執行已計劃的任務。一樣,若是你提供一個取消標記(CancellationToken對象),則能夠將標記傳遞給監視該標記的異步代碼開發
當在等待Task時,await表達式的類型爲void,等待Task