今天,晴,多云,天气闷热,在外边站一会就能把衣服湿透的那种热,中午出去了,热了一身汗回来了。还是在空调房打打字比较舒服。废话不说了,讲正题:
之前知道异步和同步的大概区别,异步呢就是方法执行过程不影响下边代码执行。同步则是执行完后才去执行下边的代码。
但是一到异步方法使用 await 来执行 ,就和同步方法搞糊涂了。就不明白为啥还要去用异步了。
今天就举几个例子来说明白一下
先看同步的写法,这个例子使用 同步方法访问 址。
class Program { static void Main(string[] args) { Test test = new Test(); test.DoTest(); Console.ReadKey(); } } class Test { Stopwatch sw = new Stopwatch(); public void DoTest() { sw.Start(); int t1= GetBaidu(); int t2 = GetQQ(); WriteA(); WriteB(); Console.WriteLine($"{t1}:{t2}用时{sw.Elapsed.TotalMilliseconds}"); } private void WriteA() { Console.WriteLine("A"); } private void WriteB() { Console.WriteLine("B"); } private int GetBaidu() { WebClient wc1 = new WebClient(); Console.WriteLine("Baidu开始!"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); wc1.DownloadString(new Uri("http://www.baidu.com")); Console.WriteLine("Baidu完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); return 1; } private int GetQQ() { WebClient wc1 = new WebClient(); Console.WriteLine("qq开始!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); wc1.DownloadString(new Uri("http://www.qq.com")); Console.WriteLine("qq完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); return 2; } }
看先后结果及总共处理时间
再看使用异步的方法来处理
class Program { static void Main(string[] args) { Test test = new Test(); test.DoTest(); Console.ReadKey(); } } class Test { Stopwatch sw = new Stopwatch(); public void DoTest() { sw.Start(); Task<int> t1= GetBaiduAsync(); Task<int> t2 = GetQQAsync(); WriteA(); WriteB(); Console.WriteLine($"{t1.Result}:{t2.Result}用时{sw.Elapsed.TotalMilliseconds}"); } private void WriteA() { Console.WriteLine("A"); } private void WriteB() { Console.WriteLine("B"); } private async Task<int> GetBaiduAsync() { WebClient wc2 = new WebClient(); Console.WriteLine("Baidu开始!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); await wc2.DownloadStringTaskAsync(new Uri("http://www.baidu.com")); Console.WriteLine("Baidu完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); return 1; } private async Task<int> GetQQAsync() { WebClient wc2 = new WebClient(); Console.WriteLine("qq开始!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); await wc2.DownloadStringTaskAsync(new Uri("http://www.qq.com")); Console.WriteLine("qq完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); return 2; } }
看先后结果及总共处理时间结果如下
可以看出,异步的方式,在方法处理时并不等待,所以处理的时间相应会少一些。
至于await,是为了让异步方法中调用异步方法能够等待他返回结果,然后继续往上处理方法内部下边的代码才用到的。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!