首页后端开发ASP.NETC# 5.0引入了两个关键字 --async和await

C# 5.0引入了两个关键字 --async和await

时间2024-01-30 08:50:02发布访客分类ASP.NET浏览798
导读:收集整理的这篇文章主要介绍了C# 5.0引入了两个关键字 --async和await,觉得挺不错的,现在分享给大家,也给大家做个参考。C# 5.0引入了两个关键字 async和await,这两个关键字在很大程度上帮助我们简化了异步编程的实现...
收集整理的这篇文章主要介绍了C# 5.0引入了两个关键字 --async和await,觉得挺不错的,现在分享给大家,也给大家做个参考。C# 5.0引入了两个关键字 async和await,这两个关键字在很大程度上帮助我们简化了异步编程的实现代码,而且TPL中的task与async和awaIT有很大的关系

PRivate async void button1_Click(object sender, Eventargs e)        {
                VAR length = AccessWebAsync();
                // 这里可以做一些不依赖回复的操作            OtherWork();
            this.textBox1.Text += String.Format("\n 回复的字节长度为:  {
0}
    .\r\n", await length);
                this.textBox2.Text = Thread.currentThread.ManagedThreadId.ToString();
        }
            private async Tasklong>
 AccessWebAsync()        {
                MemoryStream content = new MemoryStream();
                // 对MSDN发起一个Web请求            HttpWebrequest webRequest = WebRequest.Create("http://msdn.microsoft.COM/zh-cn/") as HttpWebRequest;
            if (webRequest != null)            {
                // 返回回复结果                using (WebResponse response = await webRequest.GetResponseAsync())                {
                    using (Stream responseStream = response.GetResponseStream())                    {
                            await responseStream.CopyToAsync(content);
                    }
                }
            }
                this.textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
                return content.Length;
        }
        private void OtherWork()        {
                this.textBox1.Text += "\r\n等待服务器回复中.................\n";
        }
    

async是同步执行程序,而await起到的则是划分片段以及挂起调用方的作用,并不会创建新的线程,根据大神的分析:

在await关键字出现的前面部分代码和后面部分代码都是同步执行的(即在调用线程上执行的,也就是GUI线程,所以不存在跨线程访问控件的问题),await关键处的代码片段是在线程池线程上执行。

在上面的代码中,调用了fcL封装的GetResponseAsync等方法从而不阻塞当前UI线程,await的确不会创建新的线程,但是就在这里而言,await表达式中的确创建了新的线程——GetResponseAsync所做的.以至于造成了表面同步的假象。我之前写过一篇文章
C#async与await异步编程学习笔记

await关键字与Task有莫大的关联,从其特定的返回值就可以看出来,更深层次的await与task的continuewith函数应该是等效的.因此,用async & await关键字实现异步要么调用FCL封装好的异步方法,要么我们就自己调用task来创建新的线程分担UI线程的任务以防止UI线程阻塞.

以上就是C# 5.0引入了两个关键字 --async和await的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

.netasyncawait编程

若转载请注明出处: C# 5.0引入了两个关键字 --async和await
本文地址: https://pptw.com/jishu/592302.html
带你了解Angular10中的双向绑定 怎么在Webforms 下搭建WebAPI?

游客 回复需填写必要信息