html5中文学习网

您的位置: 首页 > 网络编程 > ASP.NET » 正文

.Net 4.5 异步编程初试(async和await)_.NET教程_编程技术

[ ] 已经帮助:人解决问题

 最近自己在研究Asp.Net Web API。在看到通过客户端来调用Web API的时候,看到了其中的异步编程,由于自己之前没有接触过,所以就稍微的学习了解一下。这两篇文章是:ZQrHTML5中文学习网 - HTML5先行者学习网

Calling a Web API From a .NET Client (C#) http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-clientZQrHTML5中文学习网 - HTML5先行者学习网

Calling a Web API From a WPF Application(C#) http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-wpf-applicationZQrHTML5中文学习网 - HTML5先行者学习网

     关于异步编程的简单理解:ZQrHTML5中文学习网 - HTML5先行者学习网

    在.NET4.5中新增了异步编程的新特性async和await,使得异步编程更为简单。通过特性可以将这项复杂的工作交给编译器来完成了。之前传统的 方式来实现异步编程较为复杂,这样对于程序猿来说处理起来比较困难,调试也没那么方便,后续的维护工作也比较痛苦。
ZQrHTML5中文学习网 - HTML5先行者学习网

   Async和Await关键字是C#异步编程的核心。通过使用这两个关键字,你可以使用.NET Framework 或 Windows Runtime的资源创建一个异步方法如同创建一个同步方法一样容易。ZQrHTML5中文学习网 - HTML5先行者学习网

   这里还有两篇是我之前对多线程简单学习的入门ZQrHTML5中文学习网 - HTML5先行者学习网

   http://www.cnblogs.com/aehyok/archive/2013/05/02/3054615.htmlZQrHTML5中文学习网 - HTML5先行者学习网

 http://www.cnblogs.com/aehyok/archive/2013/05/02/3055524.htmlZQrHTML5中文学习网 - HTML5先行者学习网

  接下来通过VS2013 创建一个基于.NET4.5的控制台应用程序进行尝试。ZQrHTML5中文学习网 - HTML5先行者学习网

简单示例ZQrHTML5中文学习网 - HTML5先行者学习网

 先直接把简单的代码贴出来,如下所示ZQrHTML5中文学习网 - HTML5先行者学习网

/// <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的关键字。ZQrHTML5中文学习网 - HTML5先行者学习网

接下来是简单的调用ZQrHTML5中文学习网 - HTML5先行者学习网

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

F5执行后结果如下ZQrHTML5中文学习网 - HTML5先行者学习网

ZQrHTML5中文学习网 - HTML5先行者学习网

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

可以发现使用了关键字之后,同步与异步的语法差别很小。随着.NET4.5的推出,许多类库和已有类库都将支持这种新型的异步语法,比如我正在学习的HTTPClient等等。ZQrHTML5中文学习网 - HTML5先行者学习网

通过运行其实和同步的是一样的,只不过看看如何来定义异步方法的返回值,根据Task<T>来进行定义。ZQrHTML5中文学习网 - HTML5先行者学习网

总结ZQrHTML5中文学习网 - HTML5先行者学习网

 1.一个异步方法的声明中必然包含一个async的修饰符。ZQrHTML5中文学习网 - HTML5先行者学习网

 2.异步方法的方法名可以以“Async”结尾。ZQrHTML5中文学习网 - HTML5先行者学习网

 3.Task<TResult> 当你的方法有返回值时,那么TResult即返回值的类型ZQrHTML5中文学习网 - HTML5先行者学习网

 4.方法通常至少包含一个await表达式。ZQrHTML5中文学习网 - HTML5先行者学习网

关于async和await的学习暂时就这么多,皮毛的皮毛,不过暂时已经足够了,等有时间了可以再深入的进行研究。ZQrHTML5中文学习网 - HTML5先行者学习网

ZQrHTML5中文学习网 - HTML5先行者学习网
ZQrHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助