博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持
阅读量:6585 次
发布时间:2019-06-24

本文共 1844 字,大约阅读时间需要 6 分钟。

  在Silverlight 5 RC版本中新增了对并行任务库(Task Parallel Library)的支持,Task Parallel Library简称TPL,它是指一个或者多个任务同时运行,类似线程或者线程池。在本例中将会以并行任务库和异步获取数据进行对比。相关资料可以看和

        首先新建一个Silverlight 5项目,在其Web项目中添加一个新的xml文件helloWorld.xml。编写代码如下:

111

        然后我们看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
(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(); }

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

本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/11/07/2230319.html,如需转载请自行联系原作者

你可能感兴趣的文章
java finally块执行时机分析
查看>>
Docker | 删除 image 失败的一种情况
查看>>
day6 字符串
查看>>
JMeter5.0 边界提取器使用
查看>>
android 热修复框架Tinker的详细简单使用
查看>>
Windows Azure 上的 Symfony,适用于 PHP 开发者的强大组合
查看>>
基于任务的Service Bus API
查看>>
Huffman树费用
查看>>
堆和栈的区别 (转贴)
查看>>
OpenGL实现通用GPU计算概述
查看>>
通过包名获取该包下的所有类
查看>>
FIND_IN_SET函数
查看>>
【JavaScript学习笔记】画图
查看>>
反向代理与直接访问Ping性能分析
查看>>
Linux写时拷贝技术(copy-on-write)
查看>>
opencv视频读取问题
查看>>
C#教程之自己动手写映射第三节[反射]
查看>>
【Todo】JS跨域访问问题的解决
查看>>
java Iterator Fail-fast机制
查看>>
Java堆外内存之五:堆外内存管理类ByteBuffer
查看>>