C#5.0 异步编程 Async和Await--介绍
C#5.0引入async和await关键字实现方法的异步调用。
直接进入正题。
async只是一个标识符,并没有实际的用途,只是用于表明某个方法是异步方法,在方法前面加上async 表示该方法为一个异步方法,方法体内部会有一个await关键字。如果没有await关键字编译器会给出警告。
await则用于等待一个异步方法的完成,await后面的方法才是异步方法,在方法执行过程中,遇到await关键字之后,会在线程池中启动一个新的线程去执行await后的方法,并同时返回一个Task对象,调用者线程继续执行,待新线程执行完毕之后,await之后的方法会继续执行到方法末尾,并返回。
await所启动的等待,不会导致方法调用者的线程组塞,因此,应该将其称为“异步等待”,其行为特性与多线程回调达到的效果类似
这里有这两个方法,在main方法中调用TestAsyncInvokeUseAwait方法

方法调用堆栈为下图

异步调用一个方法时,调用者将不会等待被调用方法执行结束,而是立即继续执行
执行结果如下

这里可以看到 在执行完DoLongJob方法正在后台执行...这里之后马上就执行了main方法中后面的语句;循环在后台执行
这里看一下异步调用的执行流程

await之后的代码,可以将其视为一个整体。看成是完成数据处理任务之后的善后处理工作,await的功能其实与TPL中的continueWith是一样的
C#5.0 异步编程 Async和Await--介绍的更多相关文章
- C#5.0 异步编程async/await用法
微软在发布VS2012的同时推出了C#5.0,其中包含了async和await 代码如下: class Program { private static readonly Stopwatch watc ...
- .NET4.5 异步编程 async和await
msdn介绍:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 其实很简单,标记了async的方法为异步方法,从方法的左大括号开始同步执行, ...
- C#异步编程(async and await)及异步方法同步调用
1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...
- 异步编程- async和await
使用目的 避免阻塞主线程 提高程序响应能力 C#中使用 C# 中的 Async 和 Await 关键字是异步编程的核心. 疑惑 The async and await keywords don't c ...
- C#中的异步编程Async 和 Await
谈到C#中的异步编程,离不开Async和Await关键字 谈到异步编程,首先我们就要明白到底什么是异步编程. 平时我们的编程一般都是同步编程,所谓同步编程的意思,和我们平时说的同时做几件事情完全不同. ...
- .net异步编程async和await的讨论收获
微软官方描述: C# 5 引入了一种简便方法,即异步编程.此方法利用了 .NET Framework 4.5 及更高版本..NET Core 和 Windows 运行时中的异步支持. 编译器可执行开发 ...
- C#5.0 异步编程 Async和Await--异步方法的规范和注意事项
要些异步方法要注意一下几点: 异步方法的返回值有三种: 1.没有任何返回值的void 2.返回一个Task任务的Task,可以获得该异步方法的执行状态 3.返回Task<T> 可以获得异步 ...
- C#异步编程----async和await组合的写法
微软示例: private async void StartButton_Click(object sender, RoutedEventArgs e) { // ExampleMethodAsync ...
- 彻底搞懂C#异步编程 async和await的原理
1.前提 熟练掌握Task并行编程. 2.用Task并行解释async和await异步 因为控制台有多线程操作的优化,因此这里选择winform来做示例. 测试代码如下所示: 有三个textbox,一 ...
随机推荐
- SSL连接出现的问题
客户端向服务器发送数据时,份两种情况,SSL单向验证和SSL双向验证 1.SSL单向验证时 代码如下: import java.io.IOException; import java.util.Has ...
- unity3D中的Input按键方法检测
一,按键的按下抬起等识别方法 void Update () { ; ; if (Input.GetKeyDown (KeyCode.A)) { Debug.Log("A按下一次") ...
- 【学习总结】Python-3-运算符优先级
参考:菜鸟教程-Python3运算符 运算符优先级-表 特别注意:逻辑运算符内部的优先级顺序-考点!!!! END
- ftp搭建记录
1.安装vsftpd的rpm包 rpm -ivh vsftpd-2.0.5-16.el5_4.1.i386.rpm 使用YUM命令安装 yum install vsftpd -y. 2.ftp命令 s ...
- 看不到但摸得到的捣蛋鬼---Zero Width Space
看不到但摸得到的捣蛋鬼---Zero Width Space 1.情况如何? 昨天,"某某某"的代码出现了一个bug.大概是这个情况: 有一个提示信息,需要展示,大概这样: 这行文 ...
- Flask配置方法
flask应用的配置(使用uWSGI和Nginx在CentOS 7上搭建) 基础的Nginx 数据库等配置省略 创建python虚拟环境 sudo pip install virtualenv mkd ...
- linux随笔-05
shell脚本&定时任务 编写Shell脚本 可以将Shell终端解释器当作人与计算机硬件之间的“翻译官”. Shell脚本命令的工作方式有两种:交互式和批处理. 交互式(Interactiv ...
- linux随笔-02
部署虚拟环境安装linux系统以及一些常用命令 工具: VmwareWorkStation 12.0——虚拟机软件(必需) RedHatEnterpriseLinux [RHEL]7.0——红帽操作 ...
- Linux安装篇超详细
在此篇文章中主要介绍Linux系统的安装,以及学习大数据过程中Linux中常用的命令有哪些. 一.Linux(CentOs6.8)的安装 1.安装VMware虚拟机 虚拟机下载地址:https://p ...
- Solr是什么?
么是Solr?Solr是什么? 答:Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口. Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服 ...