在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 下载。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。