这篇文章主要介绍了C#5.0中async和await关键字的用法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
成都创新互联是一家专业提供礼县企业网站建设,专注与网站建设、成都网站制作、H5技术、小程序制作等业务。10年已为礼县众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。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 TaskAccessWebAsync() { 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封装好的异步方法。
感谢你能够认真阅读完这篇文章,希望小编分享的“C#5.0中async和await关键字的用法”这篇文章对大家有帮助,同时也希望大家多多支持创新互联成都网站设计公司,关注创新互联成都网站设计公司行业资讯频道,更多相关知识等着你来学习!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、网站设计器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站名称:C#5.0中async和await关键字的用法-创新互联
文章链接:http://lswzjz.com/article/cceeji.html