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("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进行处理,非常感谢!

上一篇 2020年7月10日
下一篇 2020年7月10日

相关推荐