码迷,mamicode.com
首页 > 其他好文 > 详细

一个例子看懂异步代码执行效率

时间:2016-06-04 12:00:52      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

异步代码采用线程池,提供代码执行的并行性,不阻塞当前线程,实例代码,模拟三个耗时操作,分别耗时为1000、1500、1800ms,提供同步与异步的实现方式,Main中以同步异步的方式执行,对比执行时间,同步执行方式为各个方法的执行时间总和,而异步执行方式为最长的那个时间。ps:实际执行情况可能有其他的一些微不足道开销,但大体能反应异步的执行效率。

技术分享

  class OutHelper
    {
        public DateTime Method1()
        {
            Thread.Sleep(1000);
            return DateTime.Now;
        }

        public DateTime Method2()
        {
            Thread.Sleep(1500);
            return DateTime.Now;
        }

        public DateTime Method3()
        {
            Thread.Sleep(1800);
            return DateTime.Now;
        }

        public async Task<DateTime> AMethod1()
        {
            await Task.Delay(1000);
            return DateTime.Now;
        }

        public async Task<DateTime> AMethod2()
        {
            await Task.Delay(1500);
            return DateTime.Now;
        }

        public async Task<DateTime> AMethod3()
        {
            await Task.Delay(1800);
            return DateTime.Now;
        }
    }

 

class Program
    {
        static void Main(string[] args)
        {
            OutHelper oh = new OutHelper();

            Console.WriteLine("同步调用开始……");
            Stopwatch sw = new Stopwatch();
            sw.Start();

            DateTime d1 = oh.Method1();
            DateTime d2 = oh.Method2();
            DateTime d3 = oh.Method3();
            Console.WriteLine("同步:d1={0}, d2={1}, d3={2}", d1, d2, d3);
            Console.Out.Flush();
            sw.Stop();
            Console.WriteLine("同步调用耗时:{0}", sw.ElapsedMilliseconds);


            Console.WriteLine("异步调用开始……");

            sw.Reset();
            sw.Start();

            var ad1 = oh.AMethod1();
            var ad2 = oh.AMethod2();
            var ad3 = oh.AMethod3();

           Task.WhenAll(ad1, ad2, ad3);
            Console.WriteLine("同步:d1={0}, d2={1}, d3={2}", ad1.Result, ad2.Result, ad3.Result);
            Console.Out.Flush();
            sw.Stop();

            Console.WriteLine("异步调用耗时:{0}", sw.ElapsedMilliseconds);

            Console.ReadLine();
        }
    }

 

一个例子看懂异步代码执行效率

标签:

原文地址:http://www.cnblogs.com/weiweictgu/p/5558411.html

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