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_003
return 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_002
Console.WriteLine("llValue:" + ll.Result); // part_003
Console.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(); 类似执行耗时方法多个时 **先不加 await
Console.WriteLine("aaa"); //part_002
Console.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 完成,服务器可以将其线程释放用于处理其他请求。 因此,异步代码可以使服务器资源能够更有效地使用和服务器能够处理更多流量不会延迟。
希望上面描述对大家对异步编程有初步了解,如有疑问可以一起讨论。
Async await 异步编程说明的更多相关文章
- 【转】C# Async/Await 异步编程中的最佳做法
Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...
- .NET Web应用中为什么要使用async/await异步编程
前言 什么是async/await? await和async是.NET Framework4.5框架.C#5.0语法里面出现的技术,目的是用于简化异步编程模型. async和await的关系? asy ...
- C#中 Thread,Task,Async/Await 异步编程
什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调 ...
- async/await 异步编程(转载)
转载地址:http://www.cnblogs.com/teroy/p/4015461.html 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入 ...
- async/await 异步编程
前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关的知识,并整理成这篇博客,如果在 ...
- c# async/await异步编程死锁的问题
在异步编程中,如果稍有不注意,就会造成死锁问题.何为死锁:即两个以上的线程同时争夺被互相锁住的资源,两个都不放手. 在UI或asp.net中,容易造成死锁的代码如下所示: private void b ...
- c# 关于async/await异步编程的浅析和使用
线程的同步运行,时效性慢,异步运行,时效性快! 在c#5.0引出了async/await关键字,可以用其来进行异步编程. async/await定义异步方法的语法如下: 1.在方法的返回类型前面加上a ...
- .NET 中的 async/await 异步编程
原文出处: Teroy 的博客 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关 ...
- ASP.Net中的async+await异步编程
在.NET Framework4.5框架.C#5.0语法中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简 ...
随机推荐
- CentOS 7 配置SFTP
目前越来越多的FTP客户端软件开始支持SSH协议上传和下载文件,这种协议方式就是SFTP. SFTP的优势主要有两点,一是不需要再配置个FTP服务端:二是SSH协议是安全传输,上传和下载是经过加密的. ...
- Java的部分问题和小结
2015/9/6 ThreadLocal:该类提供了线程局部变量,这样可以生成对每个线程唯一的局部标识符. 2015/9/18 1.乱码问题: js:xdata = encodeURI(encode ...
- shell read变量
- ubuntu14.04 配置android studio环境
二.复制所需的文件到ubuntu 2.1.如果你还没有linux版本的android studio.sdk.jdk请先下载所需文件,我已经上传到百度网盘了 下载地址: android studio-l ...
- 嵌入式 emmc 中 安装 烧录 内核 kernel,设备树 devicetree ,根文件系统 rootfs
一般调试嵌入式开发板喜欢选择 利用 TFTP 传送 内核与 设备树, 利用 nfs 加载根文件系统. uboot 环境变量 设置如下: bootargs=root=/dev/nfs rw nfs ...
- Linux运行jar包
要运行java的项目需要先将项目打包成war包或者jar包,打包成war包需要将war包部署到tomcat服务器上才能运行.而打包成jar包可以直接使用java命令执行. 在linux系统中运行jar ...
- Java中this的基础用法
update on 2019-07-07 在Java核心技术一书中看到调用方法时this作为隐式参数传入的. 突然间许多问题都懂了 比如:方法的多态 父类变量指向子类对象的引用 对象变量指向的实际类型 ...
- mysql几个常见错误记录
select时找不到表:大小写问题 show variables like '%lower_case_table_names%'; MySQL表名大小写敏感导致的问题 使用help_topic时的se ...
- 前端学习(十七)js数组(笔记)
数组: 1. var arr=[1,2,3,4]; 2. var arr=new Array(1,2,3,4,5); 区别: 1.写法不一样,选择第一种(好写) ...
- express 的学习 (1)
- 安装`npm i express -S` - :引入express第三方对象 - :构建一个服务器对象 - :开启服务器监听端口 - :处理响应 1.下载 新建一个文件夹,cmd 进去,使用命令 ...