码迷,mamicode.com
首页 > Windows程序 > 详细

asyns和await实现传统的异步---------C#

时间:2015-11-19 07:01:16      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

传统的异步是利用回调函数来写的,写过的人都知道,,那样写的结构东一块西一块的,很不好找。

所以在这里整理啦一下asyns和await实现的异步。。。

asyns和await的异步不是很好理解。在这里,我在注释中,将细细的标明

 class Program
    {
        // ---------------规范说明-----------------------------
        //1.用async标识的方法即为异步方法,异步方法的返回值只能是void或者Task<object>,---返回值是void的方法,不能使用await调用。注意你的返回类型
        //2.在其他方法中调用异步方法时,可以加await,表示等待这个异步方法结束。 异步的关键点就在这个await
        //3.await标签只能写在异步方法中
        //4.await标识并调用的方法中,也必须要有await才行
        static void Main(string[] args)
        {
            //第一步,写了一个  “1”
            Console.WriteLine("1");
            
            Paint();
            //第三步----2,写了一个  “5”
            Console.WriteLine("5");

            Console.ReadLine();
        }

        //此方法是已经标明是异步方法
        async static void Paint()
        {
            //第二步,写了一个“2”
            Console.WriteLine("2");

            //第三步--1,代码发现await字段,整个方法将直接返回, 并在这个await这里加个标签,所以第三步输出的是“5”
            //等到 RequestBody方法返回值时,再次进入Paint方法中,并且直接从这个await字段处运行,

            //-----------------------------等待一秒---------这时候,已经输出了“5”

            //一秒后RequestBody方法返回值了,RequestBody的返回类型应该是Task<string>,
            //但是,用了await之后,返回值直接就是string
            //并且,输出“4”的操作被await阻塞
            Console.WriteLine(await RequestBody());
            Console.WriteLine("4");
   
        }

        async static Task<string> RequestBody()
        {    
            //被await调用的方法中,必须要有await
            return await Task.Run(() =>
            {
                Thread.Sleep(2000);
                return "3";
            });
        }

 


    }

 

asyns和await实现传统的异步---------C#

标签:

原文地址:http://www.cnblogs.com/xiaoleye/p/4976446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!