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

互联网 17-6-23
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 Task<long> 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关键处的代码片段是在线程池线程上执行。

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

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

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 异步
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:字符串分割的使用实例代码

相关资讯