天天看點

Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增對并行任務庫(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(); 

}  

本文轉自程興亮 51CTO部落格,原文連結:http://blog.51cto.com/chengxingliang/827058