来自:http://msdn.microsoft.com/library/vstudio/hh191443
异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要。 对 Web 资源的访问有时很慢或会延迟。 如果此类活动在同步过程中受阻,则整个应用程序必须等待。 在异步过程中,应用程序可继续执行不依赖 Web 资源的其他工作,直至潜在阻止任务完成。

下表显示了异步编程提高响应能力的典型区域。 从 .NET Framework 4.5 和 Windows 运行时中列出的 API 包含支持异步编程的方法。

 

应用程序区域

包含异步方法的受支持的 API

Web 访问

HttpClient ,SyndicationClient

使用文件

StorageFile、StreamWriter、StreamReader、XmlReader

使用图像

MediaCapture、BitmapEncoder、BitmapDecoder

WCF 编程

同步和异步操作

   

由于所有与用户界面相关的活动通常共享一个线程,因此,异步对访问 UI 线程的应用程序来说尤为重要。 如果任何进程在同步应用程序中受阻,则所有进程都将受阻。 你的应用程序停止响应,因此,你可能在其等待过程中认为它已经失败。

使用异步方法时,应用程序将继续响应 UI。 例如,你可以调整窗口的大小或最小化窗口;如果你不希望等待应用程序结束,则可以将其关闭。

当设计异步操作时,该基于异步的方法将自动传输的等效对象添加到可从中选择的选项列表中。 开发人员只需要投入较少的工作量即可使你获取传统异步编程的所有优点。

异步方法更容易编写

Visual Basic 中的 Async 和 Await 关键字,以及 C# 中的 async 和 await 关键字都是异步编程的核心。 通过使用这两个关键字,你可以使用 .NET framework 或 Windows 运行时中的资源轻松创建异步方法(几乎与创建同步方法一样轻松)。 通过使用被称为异步方法的 async 和 await 定义的异步方法。

下面的示例演示了一种异步方法。 你应对代码中的几乎所有内容都非常熟悉。 注释调出你添加的用来创建异步的功能。

 
// Three things to note in the signature:
//  - The method has an async modifier.
//  - The return type is Task or Task<T>. (See "Return Types" section.)
//    Here, it is Task<int> because the return statement returns an integer.
//  - The method name ends in "Async."
async Task<int> AccessTheWebAsync()
{ // You need to add a reference to System.Net.Http to declare client.HttpClient client = new HttpClient();// GetStringAsync returns a Task<string>. That means that when you await the// task you'll get a string (urlContents).Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");// You can do work here that doesn't rely on the string from GetStringAsync.
    DoIndependentWork();// The await operator suspends AccessTheWebAsync.//  - AccessTheWebAsync can't continue until getStringTask is complete.//  - Meanwhile, control returns to the caller of AccessTheWebAsync.//  - Control resumes here when getStringTask is complete. //  - The await operator then retrieves the string result from getStringTask.string urlContents = await getStringTask;// The return statement specifies an integer result.// Any methods that are awaiting AccessTheWebAsync retrieve the length value.return urlContents.Length;
}

如果 AccessTheWebAsync 在调用 GetStringAsync 和等待其完成期间不能进行任何工作,则你可以通过在下面的单个语句中调用和等待来简化代码。

API 异步方法
你可能想知道从何处可以找到 GetStringAsync 等支持异步编程的方法。 .NET Framework 4.5 包含使用 async 和 await 的许多成员。 可以通过附加到成员名称的“Async”后缀和 Task或 Task<TResult> 的返回类型识别这些成员。 例如,System.IO.Stream 类包含的方法 CopyToAsync、ReadAsync、WriteAsync 等方法以及同步方法 CopyTo、Read 和 Write。

线程
      如果通过使用 Async 或 async 修饰符指定某种方法为异步方法,则可以启用以下两个功能。
  • 标记的异步方法可以使用 Await 或 await 来指定悬挂点。 await 运算符通知编译器异步方法只有直到等待的异步过程完成才能继续通过该点。 同时,控件返回至异步方法的调用方。

    await 表达式中异步方法的挂起不能使该方法退出,并且 finally 块不会运行。

  • 标记的异步方法本身可以通过调用它的方法等待。

异步方法通常包含 await 运算符的一个或多个匹配项,但缺少 await 表达式不会导致编译器错误。 如果异步方法未使用 await 运算符标记悬挂点,则该方法将作为同步方法执行,不管异步修饰符如何。 编译器将为此类方法发布一个警告。

Async 、async、Await 和 await 都是上下文关键字。

转载于:https://www.cnblogs.com/zuiyirenjian/p/4187601.html

使用 Async 和 Await 的异步编程相关推荐

  1. 利用 async amp; await 的异步编程

    一.异步编程的简介 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 ...

  2. 第十节:利用async和await简化异步编程模式的几种写法

    一. async和await简介 PS:简介 1. async和await这两个关键字是为了简化异步编程模型而诞生的,使的异步编程更简洁,它本身并不创建新线程,但在该方法内部开启多线程,则另算. 2. ...

  3. async 和 await 之异步编程的学习

    async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...

  4. Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

    Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...

  5. es7 async、await定义异步函数执行同步操作

    ES7 async定义函数1.可以在不阻塞主线程的情况下,使用同步代码实现异步访问资源的能力,让我们的代码逻辑更清晰2.await Promise.resolve(内容): 返回值为resolve的参 ...

  6. .NET异步编程之新利器——Task与Await、Async

    一.  FrameWork 4.0之前的线程世界    在.NET FrameWork 4.0之前,如果我们使用线程.一般有以下几种方式: 使用System.Threading.Thread 类,调用 ...

  7. 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

    一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并 ...

  8. C# 异步编程模式 APM、EAP、TPL

    目录 异步编程模式 APM异步编程模型 APM的本质 APM的实现 读取的同步方法: BeginXxx方法--读取的异步方法: EndXxx方法--结束异步操作 异步调用的结果--与IAsyncRes ...

  9. 网络编程异步_概括地说,网络异步编程

    网络编程异步 重点(Top highlight) Asynchronous programming is not a new concept and has been around for sever ...

最新文章

  1. 一文看懂芯片测试产业
  2. SpringMVC Controller介绍(转)
  3. python一次性读取整个文件-Python逐行读取文件内容
  4. 运维自动化------ansible搭建
  5. java8 默认方法_默认方法:Java 8的无名英雄
  6. 线程,Python 实现多任务的方式之一
  7. 13.nginx 源码目录及配置
  8. 史上最全jquery视频教程
  9. Could not load NIB in bundle: 'NSBundle /Users/wyd/Library/Application Support/iPhone Simulator/5.0
  10. pr 无法启动因为计算机丢失,pramtlib.dll_“PR打不开,因为计算机丢失TimeWarpFilter.dll”是怎么回事?怎么办啊?_prccamtlib.dll...
  11. 鲍威尔法源程序码matlab,鲍威尔算法matlab程序.doc
  12. 邱锡鹏DL经典教材-《神经网络与深度学习》
  13. WPS Office 11.1.0.10314 免费完整版
  14. Python_抽奖游戏
  15. ARCGIS SERVER 授权
  16. Pinbox 网络收藏夹使用指南
  17. html 漂亮的边框效果图,Css效果之好看的边框颜色大全
  18. Linux RHCE常用命令,概念复习
  19. requests.exceptions.ConnectionError:HTTPSConnectionPool(host
  20. 色温(Temperature)转RGB (JavaScript)

热门文章

  1. 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...
  2. 玩转android studio,玩转AndroidStudioIDE
  3. 试用c51语言采样连续5次异常_学会这些自闭症儿童语言训练技巧,孩子开口说话不再困难...
  4. 全分布式集群搭建总结
  5. php mysql第4版高清_PHP和MySQL WEB开发(中文高清第4版)
  6. 单片机脉宽测量C语言,单片机脉宽测量的程序
  7. 安卓手机管理器_电脑文件快速搜索有everything,那手机呢?
  8. mysql $gt_mysql变量(用户+系统)
  9. 用户域名注册后 需要在租服务器吗,申请域名并缴费后,是不是还需要一个服务器,那怎么建服务器呢...
  10. VHDL基本门电路和数值比较器的设计