源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-02-05 10:05 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:.net4.5使用async和await异步编程实例
[b]关于异步编程的简单理解: [/b]在.NET4.5中新增了异步编程的新特性async和await,使得异步编程更为简单。通过特性可以将这项复杂的工作交给编译器来完成了。之前传统的方式来实现异步编程较为复杂,这样对于程序猿来说处理起来比较困难,调试也没那么方便,后续的维护工作也比较痛苦。 Async和Await关键字是C#异步编程的核心。通过使用这两个关键字,你可以使用.NET Framework 或 Windows Runtime的资源创建一个异步方法如同创建一个同步方法一样容易。 接下来通过VS2013 创建一个基于.NET4.5的控制台应用程序进行尝试。 先直接把简单的代码贴出来,如下所示
[u]复制代码[/u] 代码如下:
/// <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的关键字。 接下来是简单的调用
[u]复制代码[/u] 代码如下:
static void Main(string[] args)         {             Console.WriteLine("======同步方法调用=====");             PrintHelloWorld();             Console.WriteLine("同步方法调用结束");             Console.WriteLine("======异步方法调用=====");             AsyncPrintHelloWorld();             Console.WriteLine("异步方法调用结束");             Console.ReadLine();         }
F5执行后结果如下 [img]http://files.jb51.net/file_images/article/201312/20131218112916.jpg?20131118113141[/img] 通过执行结果可以很明显的看出,调用的同步方法里面是顺序执行的,而在异步方法中不一样,当通过Task.Delay(1000)暂停当前方法的时候,其方法外面的下面的方法会继续执行,也就是打印“异步方法调用结束”的语句。 可以发现使用了关键字之后,同步与异步的语法差别很小。随着.NET4.5的推出,许多类库和已有类库都将支持这种新型的异步语法,比如我正在学习的HTTPClient等等。 上面的演示只是通过简单的void的方法进行演示的,当然肯定可以带上返回值的额。
[u]复制代码[/u] 代码如下:
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表达式。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部