.net4.5使用async和await异步编程实例

转载 2015年07月10日 17:02:55
在.NET4.5中新增了异步编程的新特性async和await,使得异步编程更为简单。通过特性可以将这项复杂的工作交给编译器来完成了。之前传统的方式来实现异步编程较为复杂,这样对于程序猿来说处理起来比较困难,调试也没那么方便,后续的维护工作也比较痛苦。


Async和Await关键字是C#异步编程的核心。通过使用这两个关键字,你可以使用.NET Framework 或 Windows Runtime的资源创建一个异步方法如同创建一个同步方法一样容易。
接下来通过VS2013 创建一个基于.NET4.5的控制台应用程序进行尝试。

先直接把简单的代码贴出来,如下所示

/// <summary>
        /// 同步方法打印Hello World
        /// </summary>
        public static void PrintHelloWorld()
        {
            Console.WriteLine("同步方法调用开始");
            Console.WriteLine("同步方法:Hello World");
            Thread.Sleep(1000);
            Console.WriteLine("退出同步方法");
        }
        /// <summary>
        /// 异步方法打印Hello World
        /// </summary>
        public async static void AsyncPrintHelloWorld()
        {
            Console.WriteLine("异步方法调用开始");
            Console.WriteLine("异步方法:Hello World");
            await Task.Delay(1000);
            Console.WriteLine("退出异步方法");
        }

上面注释中也有进行说明,第一个是同步方法,第二个是异步方法。同步方法可以通过Thread.Sleep(1000);暂停方法执行1000ms,同样的异步方法可以通过await Task.Delay(1000)来处理,而且在异步方法的声明中要加入async的关键字。
接下来是简单的调用

static void Main(string[] args)
        {
            Console.WriteLine("======同步方法调用=====");
            PrintHelloWorld();
            Console.WriteLine("同步方法调用结束");
            Console.WriteLine("======异步方法调用=====");
            AsyncPrintHelloWorld();
            Console.WriteLine("异步方法调用结束");
            Console.ReadLine();
        }

F5执行后结果如下



通过执行结果可以很明显的看出,调用的同步方法里面是顺序执行的,而在异步方法中不一样,当通过Task.Delay(1000)暂停当前方法的时候,其方法外面的下面的方法会继续执行,也就是打印“异步方法调用结束”的语句。


可以发现使用了关键字之后,同步与异步的语法差别很小。随着.NET4.5的推出,许多类库和已有类库都将支持这种新型的异步语法,比如我正在学习的HTTPClient等等。
上面的演示只是通过简单的void的方法进行演示的,当然肯定可以带上返回值的额。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Async
{
    class Program
    {
        static void Main(string[] args)
        {
            var ret = AsyncAdd("累死了,真想不出啥好的例子来调用");
            Console.WriteLine(ret.Result);
            Console.ReadLine();
        }
           
        ///异步打印传入的字符串
        public async static Task<string> AsyncAdd(string str)
        {
            string result = await PringString(str);
            return result;
        }
        public async static Task<string> PringString(string str)
        {
            return "Hello World" + str;
        }
    }
}

通过运行其实和同步的是一样的,只不过看看如何来定义异步方法的返回值,根据Task<T>来进行定义。


如果指定Task<TResult>为返回结果,那么这个方法必须包含return指定的TResult结果的语句。


一个async方法里通常包含一个或多个的对应的await操作符,但如果没有await表达式也不会导致编译错误。但如果调用一个async方 法,却不使用await关键字来标记一个挂起点的话,程序将会忽略async关键字并以同步的方式执行


总结
 1.一个异步方法的声明中必然包含一个async的修饰符。
 2.异步方法的方法名可以以“Async”结尾。
 3.Task<TResult> 当你的方法有返回值时,那么TResult即返回值的类型
 4.方法通常至少包含一个await表达式。


浅谈async、await关键字 => 深谈async、await关键字

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了。但是这也给我们编程埋下了一些隐...
  • dz45693
  • dz45693
  • 2014年07月16日 20:58
  • 1549

利用jquery Ajax和.Net IHttpAsyncHandler实现网站的即时提示

项目做完有一段时间了,一直想写个博客总结一下,之前也没写过有质量的博客.一是怕写出来被各位大牛笑话,二也是因为怕自己只了解了一点皮毛就发出来误导了别人,所以一直没怎么写过博客,但是看很多大牛都鼓励程序...

.net4.5使用async和await异步编程实例

转载于:http://www.jb51.net/article/44575.htm 关于异步编程的简单理解: 在.NET4.5中新增了异步编程的新特性async和await,使得异步编程更...
  • ZeroRm
  • ZeroRm
  • 2016年12月23日 09:45
  • 190

.Net异步编程(async await)初探

  • 2017年11月07日 10:47
  • 1.99MB
  • 下载

.NET 中的 async/await 异步编程

前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关的知识,并整理成这篇博客,如果...

【转】.NET 4.5 使用async和await关键字调用异步方法

async和await关键字是.NET 4.5新增加的异步编程方式,通过使用这两个关键字可以轻松便捷的编写异步方法。使用async关键字声明异步方法,使用await关键字等待和获取异步方法返回的结果。...

[C#] .NET4.0中使用4.5中的 async/await 功能实现异步

在.NET Framework 4.5中添加了新的异步操作库,但是在.NET Framework 4.0中却无法使用。这时不免面临着抉择,到底是升级整个解决方案还是不使用呢? 如果你的软件还没发布出...
  • qiujuer
  • qiujuer
  • 2014年08月12日 11:00
  • 6373

.NET 4.5 使用async和await关键字调用异步方法

async和await关键字是.NET 4.5新增加的异步编程方式,通过使用这两个关键字可以轻松便捷的编写异步方法。使用async关键字声明异步方法,使用await关键字等待和获取异步方法返回的结果。...
  • cuoban
  • cuoban
  • 2015年12月31日 14:46
  • 812

如何在.net4.0中使用.net4.5的async/await实现异步

async/await异步功能简介从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序。在4.5版本中.NET又引入了Async和Await两个新的关键字,...
  • gatieme
  • gatieme
  • 2016年01月23日 23:21
  • 5708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.net4.5使用async和await异步编程实例
举报原因:
原因补充:

(最多只允许输入30个字)