• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#~异步编程续~.net4.5主推的await&async应用(转)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程在项目中的使用

.net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3.0中的Linq,.NET4.0中的Dynimac,而在.NET4.5中主要推出的是异步编程,而实现异步编程的简单方式就是使用await和async关键字,而在新的.net托管类库中已经大大使用了这两个关键字,我们在vs2010添加补丁和vs2012中都可以使用它,在微软的战场上,我们从来没有见过异步编程这样盛行过,在推出.net4.5后,所以需要进行异步的方法,都被实现了同步和异步的两个版本,这给开发人员以大大的方便!

下面举出两个例子来再次说明一个await和async的使用方法

一 将远程图像进行获取,然后在浏览器上进行响应

#region 异步返回文件流(提高应用程序的吞吐能力)
        public async Task<ActionResult> AwaitFile()
        {
            var responseHtml = await GetResponseStream("http://static.xuexiba.com/uploadfile/UserInfo/Avatar/201311/1302844759237319155175.jpg");
            return File(responseHtml, "image/jpeg");
        }

        private async Task<Stream> GetResponseStream(string url)
        {
            return await GetResponseContentAsync(url);
        }

        private async Task<Stream> GetResponseContentAsync(string url)
        {
            var httpClient = new System.Net.Http.HttpClient();
            var response = await httpClient.GetAsync(url);
            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                return await response.Content.ReadAsStreamAsync();
            }
            else
            {
                return null;//error
            }
        }

        #endregion

 二 将远程HTML文件进行获取,然后在浏览器上进行响应

#region 异步返回文本(提高应用程序的吞吐能力)

        public async Task<ActionResult> AwaitHtml()
        {
            var responseHtml = await GetResponseHtml("http://www.sina.com");
            return Content(responseHtml);
        }

        private async Task<string> GetResponseHtml(string url)
        {
            return await GetResponseStringAsync(url);
        }

        private async Task<string> GetResponseStringAsync(string url)
        {
            var httpClient = new System.Net.Http.HttpClient();
            var response = await httpClient.GetAsync(url);
            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                return await response.Content.ReadAsStringAsync();//加await的意思是说,主UI等待它执行完成后,再继续执行,这种就叫作并行!
            }
            else
            {
                return null;//error
            }
        }
        #endregion

而在运行后,我们可以看到,它被正常的输出了,而在它运行的背后,我们可能并不清楚,它实现上不是在WWW主线程上运行的,而是异步开启了新的线程来做的这事,这才是重要的,它这样做的目的只有一个,那就是搞高WWW的响应能力,即提高它的程序的吞吐量!

 

 

原文链接:http://www.cnblogs.com/lori/p/3955868.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#基础之进程管理发布时间:2022-07-10
下一篇:
诚聘ASP.NET(c#)工程师[北京]发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap