Async await 异步编程说明
希望在编程上有些许提高所以 最近连续2篇博客都在说明多线程和异步编程的使用,异步和多线程之间区别请自行百度,因为理解不是特别透彻就不在叙述以免误导大家,这里写下新研究整理 task 和 await 的异步编程使用
调用子方法和耗时方法如下
/// <summary>/// 有返回值异步方法/// </summary>/// <returns></returns>static async Task<int> HaveReturnAsync(){await Task.Run(() => Method1("HaveReturnAsync")); // part_001//Task t1 = new Task(() => sss());//t1.Start();Console.WriteLine("ccc"); //part_003return 10;}/// <summary>/// 耗时输出方法/// </summary>/// <param name="name"></param>static void Method1(string name){string temp1 = ""+name+"_1";string temp2 = "" + name + "_2";Console.WriteLine(temp1);Thread.Sleep(500);Console.WriteLine(temp2);}
调用主方法
//无返回值//Async2();//Console.WriteLine("Async2-Bakc"); // 有返回值var ll = HaveReturnAsync(); Console.WriteLine("aaa"); //part_002Console.WriteLine("llValue:" + ll.Result); // part_003Console.ReadKey();
执行结果
从执行结果可以看出在执行HaveReturnAsync:async Task<int> HaveReturnAsync() 主线程不会等待会直接输出//part_002 ,但在HaveReturnAsync() 方法体内 会等待 Method1 方法执行完
再输出 Console.WriteLine("ccc"); //part_003,看到这里大家会对 await 有一定了解了吧,从整体来看 主线程 调用HaveReturnAsync 是异步,在HaveReturnAsync() 方法体内 调用 Method1 用await 使其会等待Method1 执行完后
,再执行下面代码是同步。
一个async方法里通常包含一个或多个的对应的await操作符,但如果没有await表达式也不会导致编译错误。但如果调用一个async方 法,却不使用await关键字来标记一个挂起点的话,程序将会忽略async关键字并以同步的方式执行
******** 2019-06-25 补充 var ll = HaveReturnAsync(); 类似执行耗时方法多个时 **先不加 awaitConsole.WriteLine("aaa"); //part_002Console.WriteLine("llValue:" + await ll) 这个时候加 await 等待 多个结果如果有多个耗时方法时 这样就可以节省时间
总结
1.一个异步方法的声明中必然包含一个async的修饰符。
2.异步方法的方法名可以以“Async”结尾。
3.Task<TResult> 当你的方法有返回值时,那么TResult即返回值的类型
4.方法通常至少包含一个await表达式。
5. 建议使用await,.Result容易造成死锁。
await 时是释放线程,线程能去执行其它任务;.Result 就是让线程暂停,等待结果
6 Web 服务器的可用线程是有限的,而在高负载情况下的可能所有线程都被占用。 当发生这种情况的时候,服务器就无法处理新请求,直到线程被释放。 使用同步代码时,可能会出现多个线程被占用但不能执行任何操作的情况,因为它们正在等待 I/O 完成。 使用异步代码时,当进程正在等待 I/O 完成,服务器可以将其线程释放用于处理其他请求。 因此,异步代码可以使服务器资源能够更有效地使用和服务器能够处理更多流量不会延迟。
希望上面描述对大家对异步编程有初步了解,如有疑问可以一起讨论。
转载于:https://www.cnblogs.com/liyanbofly/p/7919677.html
Async await 异步编程说明相关推荐
- @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?
布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...
- 同步方法 调用异步防范_.NET Web应用中为什么要使用async/await异步编程?
布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...
- Python 3.5将支持Async/Await异步编程
根据Python增强提案(PEP) 第0492号, Python 3.5将通过async和await语法增加对协程的支持.该提案目的是使协程成为Python语言的原生特性,并"建立一种普遍. ...
- C# async/await异步编程深入理解
异步函数简介 一般指 async 修饰符声明得.可包含await表达式得方法或匿名函数. 声明方式 异步方法的声明语法与其他方法完全一样, 只是需要包含 async 关键字.async可以出现在返回值 ...
- Async和Await异步编程的原理
1. 简介 从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序.在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给 ...
- async And await异步编程活用基础
async And await异步编程活用基础 原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 awai ...
- Microsoft.Bcl.Async 使用总结--在.NET Framework 4.5项目上使用.NET Framework 4.5版本及以上版本才可以使用C# 5中的async/await异步特
正常情况下async/await异步特性,只能在.NET Framework 4.5以上的版本才可以使用,那如果想在.NET Framework 4使用C# 5中的异步特性怎么办呢?还好有一个开源的类 ...
- Async/Await异步
Async/Await是目前异步最好的结局方案. let p1=function () {return new Promise((resolve)=>{setTimeout(()=>res ...
- .net async/await 异步等待的数种情况
.net 4.5 中增加了async/await,使写异步代码能像写同步代码那样,甚至伪同步执行,真是个非常好用的东西.不过,有时候我们会希望这些异步代码能伪同步执行,有时候又希望能真异步执行.所以a ...
最新文章
- 如何搭建一个拖垮公司的技术架构?
- python使用退格键时出现^H解决方法
- 2008.09.20三多寨
- python无穷大整数_python的特殊数字类型(无穷大、无穷小等)
- nodejs 获取get中携带的参数值
- MySQL-常用命令大全
- 数学--数论-- HDU6298 Maximum Multiple 打表找规律
- [转]不知道能否解决先转下来再说不显示删除回复显示所有回复显示星级回复显示得分回复 没有找到MSVR90D.dll因此这个应用程序未能启动...
- postgres+socket.io+nodejs实时地图应用实践
- oracle nls_lang gbk,Oracle客户端NLS_LANG参数的设置详解
- php ajax 长轮询 表单,Thinkphp结合AJAX长轮询实现PC与APP推送详解
- 服务自动拉起,定时日志清理,数据统计的shell脚本
- 一个按钮控制暂停和开始java_《第一炉香》|一个女人的自甘堕落,从控制不住欲望开始...
- 应用层TCP三次握手及各种协议简介telnet【笔记】
- apache部署mo_python
- 多个中间件_小T说:消息中间件,为什么用RabbitMQ及支持的场景
- 微服务框架Jersey:快速入门
- CorelDRAW 里面如何将文字调整成半透明的颜色
- React 18 新特性-入门教程
- c语言自定义sum函数,c语言自定义函数