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();
    }


    运行效果一致,如下两图,另外如需源码请点击SL5Ansyc.zip 下载。

相关文章

热门文章

最新文章