C# 异步编程4 async与await 异步程序开发
随着C#异步程序开发系列的深入,你会发现编写异步程序越发简单。事物的发展就是这样的规律,从简单到复杂再到简单。
在C# 5.0中我们可以通过async与await关键字实现快捷的异步程序开发,如下:
static void Main(string[] args)
{
var task = GetResultAsyc();
Console.WriteLine(String.Format("Main 线程:{0}", Thread.CurrentThread.ManagedThreadId));
for (int i = ; i < ; i++)
{
Console.Write(".");
Thread.Sleep();
}
Console.WriteLine();
Console.WriteLine(String.Format("Main 线程:{0},获取异步执行结果:{1}", Thread.CurrentThread.ManagedThreadId, task.Result)); Console.ReadLine();
} private static async Task<int> GetResultAsyc()
{
Console.WriteLine(String.Format("线程:{0}", Thread.CurrentThread.ManagedThreadId));
var result = await Task.Run(() => {
Console.WriteLine(String.Format("Task 线程:{0}", Thread.CurrentThread.ManagedThreadId));
Thread.Sleep();
return ;
});
return result;
}
程序说明:
1、用 async 标注的方法表示可以进行异步调用的方法,这种方法的名称应该以Async结尾。
2、如果异步方法执行后有返回值,该异步方法的返回类型应该为Task<返回值的类型 TResult>。如果没有返回值,则应是Task。
3、在 async 标注的方法中可以开启Task或调用其他异步方法,在调用前使用 await 则调用线程将直接返回并执行其后续代码。await 后面的被调用程序则在一个或多个(视嵌套的情况等因素而定)新线程中执行。
4、在新线程中的功能执行完毕后,return result将由新线程负责返回(此处并非返回调用线程,而是由新线程设置调用线程获取的Task.Result)。
5、在调用线程中使用 await Task 或 Task.Result 时,调用线程将等待(阻塞)新线程执行完毕并获取结果。
程序输出如下:

跟我们之前介绍的一样,.Net Framework4.5之后相关的IO,Net等都已支持async和await调用,所有基于上述版本的C# 异步程序开发会简化不少。
现在.Net Web 发中已开始普及异步方式编程,这对提高Web IO吞吐量带来了帮助。
异步编程系列文章到此就告一段落,本系列文章对于想系统了解C#异步编程的朋友会有一定帮助。我相信随着C#的发展和开放,C#定会绽放的更加绚丽。
C# 异步编程4 async与await 异步程序开发的更多相关文章
- 异步编程(Async和Await)的使用
.net4.5新特性之异步编程(Async和Await)的使用 一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个“主题”.即:C#1.0托管代码→C#2. ...
- .Net 4.5 异步编程初试(async和await)
.Net 4.5 异步编程初试(async和await) 前言 最近自己在研究Asp.Net Web API.在看到通过客户端来调用Web API的时候,看到了其中的异步编程,由于自己之前没有接触过, ...
- .NET4.5新特性之异步编程(Async和Await)的使用
一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语 ...
- .NET异步编程初识async与await
这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...
- 《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await
C# 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用.在此之前的异步编程实现难度较高,async使异步编程的实现变得 ...
- C# 异步编程,async与await的简单学习
前提声明:C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await).调用方信息(Caller Information) (C#版本与.NET版本 ...
- 多线程之异步编程: 经典和最新的异步编程模型,async与await
经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例1.使用经 ...
- Async和Await异步编程的原理
1. 简介 从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序.在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给 ...
- async And await异步编程活用基础
原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 await 的理解有更深一层的理解. async 和 a ...
随机推荐
- 【sping揭秘】20、spring的orm
面向对象的操作方式,spring统一定义在org.springframework.jdbc.object以RdbmsOperation作为顶层抽象定义 Spring对各种ORM的集成 Spring的集 ...
- Django--Ajax 提交
一 什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...
- JavaScript设计模式----装饰者模式
装饰者模式的定义: 装饰者(decorator)模式能够在不改变对象自身的基础上,在程序运行期间给对像动态的添加职责.与继承相比,装饰者是一种更轻便灵活的做法. 装饰者模式的特点: 可以动态的给某个对 ...
- 强制清除 gradle 依赖缓存
今天同事误上传一个库,然后又删除了... 我刚好把他上传的库给down下来了...然后项目一直报错,clean...重新编译...删build文件....全都不管用===== 好几个人研究了好久,只能 ...
- 常用的npm指令总结
一.安装指令,通常是全局安装 npm install <package name> -g 二.移除全局安装包 npm uninstall <package name> -g 三 ...
- 一文了解JAVA虚拟机的重要组成
JVM是JAVA平台的重要组成之一,因涉及知识点太多,故从以下几个方面对JVM进行浅层面的介绍,如果需要深入理解,推荐学习机械工业出版社的<深入理解JAVA虚拟机>. 请尊重作者劳动成果, ...
- Maven项目打包成可执行Jar文件
在使用Maven完成项目以后,如果需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁 ...
- LearnOpenGL学习笔记(二)——着色器简单理解
着色器在OpenGL中发挥着重要作用,它就像一个画笔,将输入的数据流,转为数学坐标,再将三维坐标变成二维坐标(针对我们现在用的二维显示器,全息显示器肯是三维的),再把二维坐标实际的像素点位置(这里面肯 ...
- go中的读写锁RWMutex
读写锁是针对于读写操作的互斥锁. 基本遵循两大原则: 1.可以随便读.多个goroutin同时读. 2.写的时候,啥都不能干.不能读,也不能写. 解释: 在32位的操作系统中,针对int64类型值的读 ...
- 第6章 Selenium2-Java 自动化测试模型
6.1 自动化测试模型介绍 6.1.1 线性测试 :其实就是单纯地来模拟用户完整的操作场景. 优势就是每一个脚本都是完整且独立的: 缺陷测试用例的开发与维护成本很高. 6.1.2 模块化驱动 ...