??????? 在Silverlight 5 RC版本中新增了對并行任務庫(Task Parallel Library)的支持,Task Parallel Library簡稱TPL,它是指一個或者多個任務同時運行,類似線程或者線程池。在本例中將會以并行任務庫和異步獲取數據進行對比。相關資料可以看http://msdn.microsoft.com/en-us/library/dd537609.aspx和http://www.cnblogs.com/vwxyzh/tag/TPL/
??????? 首先新建一個Silverlight 5項目,在其Web項目中添加一個新的xml文件helloWorld.xml。編寫代碼如下:
?
<?xml?version="1.0"?encoding="utf-8"??>?<a>111</a>? ??????? 然后我們看Silverlight 4及之前的版本中如何異步獲取數據,其代碼如下:
?
//SL4異步獲取結果?private?void?SL4InitiateWebRequest()?{?????HttpWebRequest?request?=?(HttpWebRequest)HttpWebRequest.Create("http://localhost:12887/helloWorld.xml");?????request.BeginGetResponse(new?AsyncCallback(onRequestComplete),?request);??}?private??void?onRequestComplete(IAsyncResult?asynchronousResult)?{?????HttpWebRequest?request?=?asynchronousResult.AsyncState?as?HttpWebRequest;?????HttpWebResponse?response?=?request.EndGetResponse(asynchronousResult)?as?HttpWebResponse;?????var?s?=?response.GetResponseStream();?????var?reader?=?new?StreamReader(s);?????string?xmlFileText?=?reader.ReadToEnd();?????this.Dispatcher.BeginInvoke(()?=>?{?MessageBox.Show("這是SL4獲取Xml數據:"+xmlFileText);?});?}? ????????然后我們再看通過TPL來異步獲取數據,當然這之前需要using System.Threading.Tasks。
?
//silverlight?5并行計算??private?void?SL5InitiateWebRequest()??{??????string?uri?=?"http://localhost:12887/helloWorld.xml";??????var?request?=?HttpWebRequest.Create(uri);???????var?webTask?=?Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,??????????request.EndGetResponse,TaskCreationOptions.None)??????????.ContinueWith(task?=>???????????{???????????????var?response?=?(HttpWebResponse)task.Result;???????????????var?stream?=?response.GetResponseStream();??????????????var?reader?=?new?StreamReader(stream);???????????????string?xmlFileText?=?reader.ReadToEnd();??????????????this.Dispatcher.BeginInvoke(()?=>?{?MessageBox.Show("這是SL5獲取Xml的數據:"?+?xmlFileText);?});??????????????});??}?? ??????? 最后我們客戶端調用上面的兩種方式來獲取數據。
?
public?MainPage()??{?????InitializeComponent();?????//調用普通異步?????SL4InitiateWebRequest();?????//并行任務庫?????SL5InitiateWebRequest();?}?? ????????運行效果一致,如下兩圖,另外如需源碼請點擊SL5Ansyc.zip 下載。
轉載于:https://blog.51cto.com/chengxingliang/827058
總結
以上是生活随笔為你收集整理的Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。