教你正确打开async/await关键字的使用
这段时间在项目开发中看到了一些async/await的使用,在aspnet core的host组件源码中也看到了许多的async/await代码。在开发时,正确的使用了async/await是可以提高程序的性能。下面的代码教你正确的理解await关键字的暂停/阻塞方法调用:
static void Main(string[] args)
{
Console.WriteLine("-------主线程启动-------");
var task = GetStrLengthAsync();
Console.WriteLine("主线程继续执行");
Console.WriteLine("Task返回的值: " + task.Result);
Console.WriteLine("-------主线程结束-------"); Console.Read();
} static async Task<string> GetStrLengthAsync()
{
Console.WriteLine("GetStrLengthAsync方法开始执行"); var str = await GetString();
Console.WriteLine("GetString方法调用结束"); var str1 =await GetStringOne();
Console.WriteLine("GetStringOne方法调用结束"); Console.WriteLine("GetStrLengthAsync方法执行结束");
return str + " ###### " + str1;
} ///await关键字会暂停/阻塞其所在的方法,返回调用 await关键字所在的方法处 继续执行,而不是接着await关键字所在的代码处往下执行,注释下面的代码,查看运行结果即可确认。
//static async Task<string> GetStrLengthAsync()
//{
// Console.WriteLine("GetStrLengthAsync方法开始执行");
// var str = GetString();
// Console.WriteLine("GetString方法调用结束");
// var str1 = GetStringOne();
// Console.WriteLine("GetStringOne方法调用结束");
// Console.WriteLine("GetStrLengthAsync方法执行结束");
// return await str + " ###### " + await str1;
//}
static async Task<string> GetString()
{
Console.WriteLine("GetString方法开始执行");
return await Task.Run(() =>
{
Thread.Sleep();
return "GetString的返回值";
});
} static async Task<string> GetStringOne()
{
Console.WriteLine("GetStringOne方法开始执行");
return await Task.Run(() =>
{
Thread.Sleep();
return "GetStringOne的返回值";
});
}
await关键字会阻塞/暂停它所在的方法。根据结果即可判断:
//主线程启动
//GetStrLengthAsync方法开始执行
//GetString方法开始执行
//主线程继续执行
//GetString方法调用结束
//GetStringOne方法开始执行
//GetStringOne方法调用结束
//GetStrLengthAsync方法执行结束
//Task返回的值:
//主线程结束 //主线程启动
//GetStrLengthAsync方法开始执行
//GetString方法开始执行
//GetString方法调用结束
//GetStringOne方法开始执行
//GetStringOne方法调用结束
//GetStrLengthAsync方法执行结束
//主线程继续执行
//Task返回的值:
//主线程结束
教你正确打开async/await关键字的使用的更多相关文章
- 异步编程Async/await关键字
异步编程Async \await 关键字在各编程语言中的发展(出现)纪实. 时间 语言版本 2012.08.15 C#5.0(VS2012) 2015.09.13 Python 3.5 2016.03 ...
- .net 异步编程async & await关键字的思考
C# 5.0引入了两个关键字 async和await,这两个关键字在很大程度上帮助我们简化了异步编程的实现代码,而且TPL中的task与async和await有很大的关系 思考了一下异步编程中的asy ...
- .Net异步关键字async/await的最终理解
由于之前的项目中自己突然想试试异步action,于是使用了一下,突然就对异步action的执行流程以及原理及其好处产生了兴趣,再参考了一些文章之后,就做了下归类. 我们可以不需要太深入的理解底层,但是 ...
- 为什么我们要使用Async、Await关键字
前不久,在工作中由于默认(xihuan)使用Async.Await关键字受到了很多质问,所以由此引发这篇博文“为什么我们要用Async/Await关键字”,请听下面分解: Async/Await关键字 ...
- async/await 实现协程
2. 基本了解 在了解异步协程之前,我们首先得了解一些基础概念,如阻塞和非阻塞.同步和异步.多进程和协程. 2.1 阻塞 阻塞状态指程序未得到所需计算资源时被挂起的状态.程序在等待某个操作完成期间,自 ...
- 温故知新,CSharp遇见异步编程(Async/Await),聊聊异步编程最佳做法
什么是异步编程(Async/Await) Async/Await本质上是通过编译器实现的语法糖,它让我们能够轻松的写出简洁.易懂.易维护的异步代码. Async/Await是C# 5引入的关键字,用以 ...
- 关于异步执行(Async/await)的理解(转发)
原文地址: http://blog.jobbole.com/85787/ 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行.而异 ...
- Python协程:从yield/send到async/await
这个文章理好了脉落. http://python.jobbole.com/86069/ 我练 习了一番,感受好了很多... Python由于众所周知的GIL的原因,导致其线程无法发挥多核的并行计算能力 ...
- async/await 异步编程(转载)
转载地址:http://www.cnblogs.com/teroy/p/4015461.html 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入 ...
随机推荐
- Filebeat+ELK部署文档
在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的Filebeat+ELK开源实时日志分析平台的记录过程,有不对的地方还望指出. 简单介绍: 日志主要包括系统日志.应用 ...
- luogu 3084 单调队列+dp
注意处理出两个数组: r[i] 能覆盖i点的区间的左端点最小值(覆盖左侧最远处) l[i] i不能覆盖的区间的左端点左端点最大值 在该区间内寻找用来更新f[i] 答案的 j 即 l[i]<= j ...
- 通过IDEA搭建scala开发环境开发spark应用程序
一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安装scala插件,具体安装办法如下. 1.打开idea,点击c ...
- StringBuffer/StringBuilder总结
- 🍓 移动端调试工具之vconsole的使用~ 🍓
这里以在vue项目中的使用为例⬇️ 嗯模块化的. 不消多说,先cnpm install vconsole -S 然后在mian.js中配置之- ok啦-- 开发混合app的筒子,使用mac的话也有别的 ...
- underscore用法大全
1._.find函数 var one = _.find(all, function (item) { return item.C_ID == selected; }); $('#C_NAME').va ...
- 解决radio、select表单返回时,再次选择失效
应用场景:我们在选择好radio跟select之后提交表单,返回历史记录时,再次选择,提交表单,发现提交的是上次表单选择的 解决办法:我们可以一进页面就给radio跟select的选项重置掉,因为,返 ...
- java学习教程与笔记
一个java学习教程:http://www.jikexueyuan.com/path/java/#stage1 集合类学习: java中结合类很多,但用得比较多的一般有三种,当然,其它语言也是,主要是 ...
- EF的三种数据加载方式
EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载. (一 ...
- 帆软报表(finereport)参数组合/下拉参数联动
首先实现下拉参数联动 1.参数的定义→添加控件绑定数据→参数过滤和参数面板样式 下拉复选框控件注意事项:select * from tablewhere 1=1${if(len(控件名称)=0,&qu ...