注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C#异步(C#5.0)  

2011-09-21 11:38:08|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C#异步
以前C#的异步,主要是在SOCKET中使用,用起来还是比较起作用的,在NET FRAMEWORK3.5中,异步的方式有了进一步的变化,不是使用IAsyncResult而是用SocketAsyncEventArgs作为上下文对象。应用程序创建并管理(并且可以重复使用)SocketAsyncEventArgs 对象。
但是在VS2011 PRIVIEW和VS2010 CTP中(两种实现方式略有不同),采用另外两个关键字:async和await,不过在这两个版本里,Task的函数有所不同,一个使用Task.WhenAll一个用TaskEx.Run,具体的细节因为资源尚不是太丰富,暂时先会用,还是我们的老办法,照顾前瞻,但不纠缠于前瞻。
老规矩,先看代码:
程序的界面是WPF写成的:

        private  Task<int> MyTest()
        {
            int[] results = { 1,2,3};
            return TaskEx.Run<int>(() => foo(int.MaxValue/2));
        }

        private async void Set(object sender, RoutedEventArgs e)
        {
            var x = await bar1();
            this.textBox1.Text = x.ToString();
        }

        private  int Test(int seed)
        {
            Random r = new Random(seed);
            string s = "";
            int i = 0;
            while (s != "this")
            {
                char c1 = (char)r.Next(67, 122);
                char c2 = (char)r.Next(67, 122);
                char c3 = (char)r.Next(67, 122);
                char c4 = (char)r.Next(67, 122);
                s = new string(new char[] { c1, c2, c3, c4 });
                i++;
            }
            return i;
        }
基本上就这样,一些代码是从网上拷贝下来的,这个东西你在测试后会发现,原来我们常用的比如大数据量运算我们使用一个线程,然后再用委托回调实现界面的更新,但是,在这个版本以后,我们就可以直接使用异步方式来实现了,测试表明,效果非常好,可以说很漂亮的完成了需要的工作。
这说明这个异步方式的调用等于大大简化了UI编程的数据运算这一部分,毕竟生成一个线程再维护着,对程序的开销来说,特别是对程序员来说,更特别是对于新手来说,太方便了,当然,这两个关键字的后面使用了什么,是不是也使用线程,目前还不得而知,但不管如何,效果是看到了。
最后说一下,这个CTP的安装,(注意:因为目前没有使用VS2011,所以int[] results =
            await Task.WhenAll(Enumerable.Range(0, 10).Select(x => Task.Factory.StartNew(() => foo(unchecked((int)(DateTime.Now.Ticks >> x))))));
这个东西是不能使用的,暂时只好不理他。),先从官网下载VS2010的SP1,既慢而且安装也不容易,要有耐心,耐心是一种美德。然后再下载Microsoft Visual Studio Async CTP (SP1 Refresh)。这其中需要上网,大家要慢慢的不要着急。
然后下载完成后会编译一个库到你的C:\Documents and Settings\fpc\My Documents\Microsoft Visual Studio Async CTP\Samples这个下面,找到相应的库AsyncCtpLibrary.dll或其它你想用的,在工程里添加引用,然后就可以使用  await 和async两个关键字了。

  评论这张
 
阅读(1278)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017