C#中的Async,Await异步技术

作者 the7
发布于 2020年01月18日
评论 0
浏览 191

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 "下载网页并保存成功"
}

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)