标签:
异步代码采用线程池,提供代码执行的并行性,不阻塞当前线程,实例代码,模拟三个耗时操作,分别耗时为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