.NET异步编程之新利器——Task与Await、Async
生活随笔
收集整理的這篇文章主要介紹了
.NET异步编程之新利器——Task与Await、Async
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.??FrameWork 4.0之前的線程世界?
? 在.NET FrameWork 4.0之前,如果我們使用線程。一般有以下幾種方式:
- 使用System.Threading.Thread 類,調用實例方法Start()開啟一個新線程,調用Abort()方法來提前終止線程。
- 使用System.Threading.ThreadPool類,調用靜態方法QueueUserWorkItem(),將方法放入線程池隊列,線程池來控制調用。
- 使用BeginInvoke,EndInvoke,BeginRead,EnRead,BeginWrite,EndWrite等一系列的異步方法。
- 使用System.ComponentModel.BackgroundWorker控件,調用實例方法RunWorkerAsync(),開啟一個新線程。
二.??.Net 傳統異步編程概述?
- 異步編程模型 (APM),在該模型中異步操作由一對 Begin/End 方法(如 FileStream.BeginRead 和 Stream.EndRead)表示。
- 基于事件的異步模式 (EAP),在該模式中異步操作由名為“操作名稱Async”和“操作名稱Completed”的方法/事件對(例如 WebClient.DownloadStringAsync 和 WebClient.DownloadStringCompleted)表示。 (EAP 是在 .NET Framework 2.0 版中引入的,在silverlight或者wpf變成中經常用到)。
三.??Task 的優點以及功能???
- 在任務啟動后,可以隨時以任務延續的形式注冊回調。
- 通過使用 ContinueWhenAll 和 ContinueWhenAny 方法或者 WaitAll 方法或 WaitAny 方法,協調多個為了響應 Begin_ 方法而執行的操作。
- 在同一 Task 對象中封裝異步 I/O 綁定和計算綁定操作。
- 監視 Task 對象的狀態。
- 使用 TaskCompletionSource 將操作的狀態封送到 Task 對象。
四.??TASK的用法
?????請參考這篇文章
五.??使用 Task 封裝常見的異步編程模式
- 使用Task封裝APM異步編程模式。C#5.0中提供的async和await使異步編程更簡單。await在msdn的解釋是“運算符應用于一個異步方法的任務掛起方法的執行,直到等待任務完成。?任務表示正在進行的工作。”它返回的結果是Task和Task<TResult>.下面我們就用一個demo具體解析:
- 使用 Task 對象封裝 EPM 異步模式?。?這種模式從 .Net 2.0 開始出現, 同時在 Silverlight 中大量出現, 這種異步模式以 “操作名稱Async” 函數和 “操作名稱Completed” 事件成對出現為特征。常見的操作有使用lamda表達式;或者使用+=“操作名稱Completed”(tip:如果使用lamda表達式,無法回收資源,如果同時調用多個,數據會亂套,建議如果非要用,最好用+=“操作名稱Completed”,在操作名稱Completed事件中再-=“操作名稱Completed”)。
關鍵字:TaskCompletionSource,簡單理解委托給task屬性,利用task來操作。
此博客來自于http://www.cnblogs.com/luqixinhe/archive/2013/07/18/3197645.html,記錄時為了更好的學習。
總結
以上是生活随笔為你收集整理的.NET异步编程之新利器——Task与Await、Async的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有机构预测,我国今年的经济将出现2.6%
- 下一篇: .NET的MVVM框架