油炸小可爱|C# 中 aysnc 异步方法中使用await 和同步方法的区别

今天 , 晴 , 多云 , 天气闷热 , 在外边站一会就能把衣服湿透的那种热 , 中午出去了 , 热了一身汗回来了 。 还是在空调房打打字比较舒服 。 废话不说了 , 讲正题:
之前知道异步和同步的大概区别 , 异步呢就是方法执行过程不影响下边代码执行 。 同步则是执行完后才去执行下边的代码 。
但是一到异步方法使用 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(""));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(""));Console.WriteLine("qq完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));return 2;}}看先后结果及总共处理时间
油炸小可爱|C# 中 aysnc 异步方法中使用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();Task t1= GetBaiduAsync();Task 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 GetBaiduAsync(){WebClient wc2 = new WebClient();Console.WriteLine("Baidu开始!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));await wc2.DownloadStringTaskAsync(new Uri(""));Console.WriteLine("Baidu完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));return 1;}private async Task GetQQAsync(){WebClient wc2 = new WebClient();Console.WriteLine("qq开始!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));await wc2.DownloadStringTaskAsync(new Uri(""));Console.WriteLine("qq完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));return 2;}}看先后结果及总共处理时间结果如下
油炸小可爱|C# 中 aysnc 异步方法中使用await 和同步方法的区别可以看出 , 异步的方式 , 在方法处理时并不等待 , 所以处理的时间相应会少一些 。
【油炸小可爱|C# 中 aysnc 异步方法中使用await 和同步方法的区别】至于await,是为了让异步方法中调用异步方法能够等待他返回结果 , 然后继续往上处理方法内部下边的代码才用到的 。


推荐阅读