随着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 异步程序开发的更多相关文章

  1. 异步编程(Async和Await)的使用

    .net4.5新特性之异步编程(Async和Await)的使用 一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个“主题”.即:C#1.0托管代码→C#2. ...

  2. .Net 4.5 异步编程初试(async和await)

    .Net 4.5 异步编程初试(async和await) 前言 最近自己在研究Asp.Net Web API.在看到通过客户端来调用Web API的时候,看到了其中的异步编程,由于自己之前没有接触过, ...

  3. .NET4.5新特性之异步编程(Async和Await)的使用

    一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语 ...

  4. .NET异步编程初识async与await

    这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...

  5. 《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await

    C# 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用.在此之前的异步编程实现难度较高,async使异步编程的实现变得 ...

  6. C# 异步编程,async与await的简单学习

    前提声明:C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await).调用方信息(Caller Information)  (C#版本与.NET版本 ...

  7. 多线程之异步编程: 经典和最新的异步编程模型,async与await

    经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例1.使用经 ...

  8. Async和Await异步编程的原理

    1. 简介 从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序.在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给 ...

  9. async And await异步编程活用基础

    原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 await 的理解有更深一层的理解. async 和 a ...

随机推荐

  1. HoloLens开发手记 - 使用Visual Studio Using Visual Studio

    不论你是否使用DirectX或Unity来开发全息应用,你都会使用Visual Studio 2015来进行调试和部署应用.在本部分,你将会学习以下内容: 如何通过Visual Studio将你的应用 ...

  2. Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒绝访问

    异常信息:Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046 ...

  3. Linux_CentOS-服务器搭建 <六>

    修改MySQL编码: 二话不说先登录: mysql -u root -p 查看下神奇的mysql系统变量及其值: show variables like '%character%'; //记住分号哦, ...

  4. SQL 必知必会·笔记<17>使用存储过程

    存储过程就是为以后使用而保存的一条或多条SQL 语句.可将其视为批文件,虽然它们的作用不仅限于批处理. 1. 存储过程的优点和缺点 存储过程的优点: 使用存储过程有三个主要的好处,即简单.安全.高性能 ...

  5. LoadRuner12.53教程(二)

    使用HP Web访问示例应用程序 shǐ使   yòng用   H   P   W   e   b   fǎng访   wèn问   shì示   lì例   yìng应   yòng用   chén ...

  6. css3学习--select怎么去掉默认样式

    select { 2. /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ 3. border: solid 1px #000; 4. /*很关键:将默认的select选择框样式 ...

  7. netty源码解解析(4.0)-3 Channel的抽象实现

    AbstractChannel和AbstractUnsafe抽象类 io.netty.channel.AbstractChannel 从本章开始,会有大量的篇幅涉及到代码分析.为了能够清晰简洁的地说明 ...

  8. [HEOI2016] 序列

    Description 有n个数,每个数有若干取值,但是只能在原数列的一个位置变换取值,求一个最长上升子序列,满足无论数列如何变化,这都是一个最长上升子序列. Solution 记录 \(l[i],r ...

  9. ASP .NET MVC HtmlHelper扩展——简化“列表控件”的绑定

    在众多表单元素中,有一类<select>元素用于绑定一组预定义列表.传统的ASP.NET Web Form中,它对应着一组重要的控件类型,即ListControl,我们经常用到DropDo ...

  10. 将第三方包安装到maven本地仓库

    今天在做jasper report生成pdf文档的时候,需要引入亚洲字体jar包.maven仓库是有这个jar包,但是在项目pom文件始终不能下载.无奈只有将jar包安装到maven本地仓库. 1 将 ...