• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > async and await 的入门基础操作

async and await 的入门基础操作

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了async await,c async await,nodejs async await,js async await,node async await等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

如果有几个Uri,需要获取这些Uri的所有内容的长度之和,你会如何做?

很简单,使用WebClient一个一个的获取uri的内容长度,进行累加。

也就是说如果有5个Uri,请求的时间分别是:1s 2s 3s 4s 5s.

那么需要的时间是:1+2+3+4+5=(6*5)/2=15.

如果采用并行计算的话,结果可能是这样:

image

总时间长度是5s.

为了演示效果,需要下面3个页面:

image

其中SlowPage 的Page_load代码如下:

Main 函数主要是构造Uri,然后调用AsyncDemo的SumPageSizes方法来获取所有Uri的内容的总长度。

结果如下:

image 

可以看到时间分别是0s,5s,10s,0s ,5s,10s.所以总长度是(0+5+10)*2=30.

可以看到速度很慢,如果有一个网页卡住的话,后面很恐怖的哦

下面演示使用async,await的方式:

第一步:将 VS2010 升级到 VS2010 sp1.

第二步:下载Async CTP,进行安装

第三步:为应用程序添加AsyncCTPLibrary引用,如下:

image 

OK,将上面的SumPageSizes 方法修改如下:

image 

WebClient的扩展如下:

image

可以看到基本上为每个Download 都增加了一个XXXTaskAsync 的扩展方法。

返回的全部都是Task,

为什么全部都是Task?,因为await 只能wait Task,并且await 只能用在async 标记的方法中,

async 关键字表明这是个异步方法。

第一句:

public async Task<int> SumPageSizesAsync(IList<Uri> uris)

因为我们申明的是一个异步方法,所以要使用async 关键字,SumPageSizesAsync方法返回的结果是int类型,所以返回Task<int>.


第二句:

IEnumerable<Task<Byte[]>> tasks = uris.Select(uri => new WebClient().DownloadDataTaskAsync(uri));

获取DownloadDataTaskAsync返回的所有Task。

第三句:

byte[][] data = await TaskEx.WhenAll(tasks);

首先第二句返回的是IEnumerable<Task<Byte[]>> 类型,也就是一个一个的Task<Byte[]> 的任务,使用TaskEx的WhenAll方法可以将这些任务转变成一个Task<Byte[][]> 的任务


使用await关键字意味着Task<Byte[][]> 方法需要等待,等待结束后返回Byte[][]。

第四句:

return await TaskEx.Run<int>(() =>

            {

   

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 浅谈Async和Await如何简化异步编程(几个实例让你彻底明白)
  • 关于async和await的一些误区实例详解
  • .NET中的async和await关键字使用及Task异步调用实例
  • async and await 的入门基础操作

相关文章

  • 2017-05-28C#线程池用法详细介绍
  • 2017-05-28C#注释的一些使用方法浅谈
  • 2017-05-28C#实现对文件进行加密解密的方法
  • 2017-05-28C#调用Python脚本的简单示例
  • 2017-05-28C# WinForm捕获全局变量异常 SamWang解决方法
  • 2017-05-28C#简单生成缩略图的方法
  • 2017-05-28Winform中进行MD5加密的实例
  • 2017-05-28使用SmtpClient发送邮件的方法
  • 2017-05-28详解C#编程中异常的创建和引发以及异常处理
  • 2017-05-28C#中for循环、while循环循环执行的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 用C#编写获取远程IP,MAC的方法
    • C#结合数据库的数据采集器示例
    • C#实现rabbitmq 延迟队列功能实例代码
    • 操作xml,将xml数据显示到treeview的C#代码
    • C#实现HTTP上传文件的方法
    • C#模式画刷HatchBrush用法实例
    • 常用.NET工具(包括.NET可再发行包2.0)下载
    • c#桥接模式(bridge结构模式)用法实例
    • C#权限管理和设计浅谈
    • 分享用于操作FTP的客户端C#类

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有