初探C#中的Async,Await异步技术

async和await是出现在C#5.0之后,它的出现给异步编程带来了极大方便,下边说说这两个关键字。

async 关键字

  1. 标记一个方法是不会阻塞的版本
  2. 在执行时会瞬间完成返回一个任务Task
  3. C#本身不会为其启动新线程
  4. 如果是不规范的处理,即便标记了 async,也可能阻塞线程、
  5. .Net下几乎所有执行慢的方法都会有async版本
  6. async方法里必须至少使用一次await,否则就没必要用async关键字

await关键字

  1. await后应该紧跟task
  2. 同步的等待该任务完成,并获取返回值
  3. await代码之后的代码仍由原线程执行
  4. await正确的task会等待但不会阻塞

总结

所以编写正确的async方法很重要。下边以下载网页并保存到C盘目录为例,写一个Demo范例

public async Task<string> DownloadAndSaveAsync(string url)
{
   var wc = new WebClient();
   var html = await wc.DownloadStringTaskAsync(url);
   await Task.Run(()=>{
      File.WriteAllText("c:\1.txt",html);
   });
   return "下载网页并保存成功"
}