首页 > 其他 > 详细

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

时间:2016-06-04 11:59:29      阅读:216      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!