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