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