同步串口和异步串口的区别_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;        }    }

看先后结果及总共处理时间

7a88931c0fcf856bf8b9dd8558cfdfa1.png

再看使用异步的方法来处理

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("http://www.baidu.com"));            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("http://www.qq.com"));            Console.WriteLine("qq完成!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));            return 2;        }    }

看先后结果及总共处理时间结果如下

11ee92b3a7f260021774adf0e19ec28f.png

可以看出,异步的方式,在方法处理时并不等待,所以处理的时间相应会少一些。

至于await,是为了让异步方法中调用异步方法能够等待他返回结果,然后继续往上处理方法内部下边的代码才用到的。

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页