C#的新特性体验(异步方法的同步调用)

原创 2012年03月27日 14:01:59

        异步编程出现已经很早了,微软在silverlight中的(RIA Service)将这个发挥到了极致,其实就是只提供异步远程服务调用,说起来也是非常美好的事情,但实际上却未必如此美好,因为很多应用,特别是带有业务性质的,都需要一定程度上的同步,在这种情况下如果用异步编程就会非常的复杂,需要用异步模拟同步,这个工作量是非常大的,特别是在业务逻辑比较复杂的情况下,需要调用一系列异步方法来组合,而调用在业务上要求有先后的情况下,就是一个灾难,非常复杂,而且代码的可读性和维护性极差(用silverlight做过企业应用的应该能体会那种痛苦),当然异步编程由于其处理方式比起同步编程来讲,对程序员的要求要高很多.微软显然是认识到了这个问题,于是在新的C#版本中弄出了async和await关键字,来简化异步下的同步模拟,下面的代码是我进行测试的代码(抄CSDN今天头条中异步编程中的):

private static async Task<string> GetContent(string url)
        {
            WebRequest wr = WebRequest.Create(url);
            //var rsp = wr.GetResponse();
            //var stm1 = rsp.GetResponseStream();

            var response = await wr.GetResponseAsync();
            using (var stm = response.GetResponseStream())
            {
                using (var reader = new StreamReader(stm))
                {
                    //var content = reader.ReadToEnd();
                    var content = await reader.ReadToEndAsync();
                    return content;
                }
            }
        } 

UI线程下调用代码如下:

var theRet = GetContent("http://sd.csdn.net/a/20120326/313535.html");
            MessageBox.Show(theRet.Result);

       await关键字是表示等待后面异步调用可用,起到异步转同步的作用,调试时也确实在await语句时被挂起了,其实界面无法做任何事情,这就跟同步调用没什么区别了,至少效果上一样的,因此如果遇到这种需求,其实没必要采用这种异步转同步的方式处理,直接同步调用就OK.

        坦率的讲,上面的代码我没有调试到结果,我用同步的方法很快就得到了结果,而用上述方法,就在var response = await wr.GetResponseAsync();语句时假死了,等了很久也没有响应,所以就直接结束调式了,那位兄弟测试后可以得到结果的,麻烦告诉一下我,好找找原因.是我人品问题还是我的VS2011库有问题,或者其它.

       另外,CSDN的头条异步编程其实是个噱头,应该是C#5.0提供了异步方法同步调用的支持.

PS:异步编程还是需要的,但要看地方.什么事情做得太偏激都不好.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

利用C# 5 新特性 异步操作UI

参考文章:http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html using System; using System.Collecti...

C# 5新特性详解之一——异步编程 转。。保存一下以后看

C# 5新特性详解之一——异步编程 2012-03-26 13:08 | 5619次阅读 | 来源:CSDN 【已有35条评论】发表评论 关键词:C# | 作者:王然 | 收藏这篇资讯...

C# 5 新特性深入浅出:详解异步编程

【IT168 技术】导读:本文详细介绍了C#5的新特性:异步编程、方法调用、Lambda表达式..,供开发者参阅。   在即将到来的新的Windows Runtime中更根本地确定任何API都不会运行...
  • zzy7075
  • zzy7075
  • 2012年04月01日 19:40
  • 353

C#中新特性的学习:Delegate、匿名方法、lambda表达式

最近在修改一个项目的代码中,用到了lambda表达式的写法,就顺便学习了一下,发现弄清楚lambda必须要弄清楚匿名方法,弄清楚匿名方法必须要弄清楚Delegate,弄清楚Delegate还要理解C+...

新特性来实现异步编程

  • 2013年08月29日 09:57
  • 188KB
  • 下载

C#委托的同步调用和异步调用介绍

C#委托的同步调用和异步调用介绍 摘要:本文介绍C#委托的同步调用和异步调用,并通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和...
  • ilvu999
  • ilvu999
  • 2012年10月15日 14:57
  • 239

C# 委托的同步调用和异步调用--抓住重点

委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。 同步调用的例子: using System; using System...

C#委托的同步调用和异步调用

C#委托的同步调用和异步调用 http://dotnet.itwaka.com 来源:IT哇咔搜集整理 2010-11-8 19:57:14   对于C#委托我们谈的比较多,在此谈论的是C...

ansys12新特性及安装方法

  • 2011年05月13日 15:08
  • 306KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#的新特性体验(异步方法的同步调用)
举报原因:
原因补充:

(最多只允许输入30个字)