随着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 = 0; i < 100; i++)            {                Console.Write(".");                Thread.Sleep(10);            }            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(5000);                return 10;            });            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吞吐量带来了帮助。

更多相关文章

  1. .net core使用Redis发布订阅方法介绍
  2. C#中发送邮件的实现方法详解
  3. C#实现Json序列化删除null值的方法实例
  4. ASP.NET MVC 使用Bootstrap方法介绍
  5. 介绍asp.net MVC下使用rest的方法
  6. C#实现添加Word文本与图片超链接的方法
  7. C#实现操作字符串的方法总结
  8. IIS如何实现部署asp.net mvc网站的方法
  9. asp.net实现生成缩略图及加水印的方法示例

随机推荐

  1. Android(安卓)EditText软键盘弹出时防止
  2. AndroidO Camera 分析(一): (API 2)openCame
  3. mac添加android的adb等工具到环境变量
  4. android 中文 api (71) ―― BluetoothServ
  5. React native Android(安卓)命令 打包apk
  6. 51. (android开发)线性布局、相对布局、
  7. Android札记
  8. 关于“Only the original thread that cr
  9. Android换肤机制
  10. Android点击事件的四种写法