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).在这种方式下,可以通过类似同步方式编写异步代码,极大简 ...
随机推荐
- add characteristic to color
Problem: add a new Char. name D_COI6 that the description is Injected coloration #7 (COI6) in the D_ ...
- Cannot proxy target class because CGLIB2 is not available .Add CGLIB to the class path or specify proxy interfaces…..
报错:Cannot proxy target class because CGLIB2 is not available .Add CGLIB to the class path or specify ...
- linux 虚拟机网卡配置
第一种虚拟机 我们常用的虚拟机vmware虚拟机 今天为了学习ngnix,所以配了两台虚拟机.一个centos7 ,一个redhat. 哇啦哇啦安装,so easy,对吧....我选择的是精简版 ...
- accept 修改后
- scrollHeight与offsetHeight
offsetXxx 是 HTMLElement 的属性, HTMLElement 接口表示所有的 HTML 元素,scrollXxx 是 Element 的属性,Element 是一个通用性非常强的基 ...
- Jmeter的安装与环境配置
1.首先从jmeter的官网http://jmeter.apache.org/download_jmeter.cgi下载jmeter,目前最新版本为5.1,支持的JDK为1.8.. 然后进行解压. 2 ...
- Nodejs进阶:密码加盐
原理:就是在密码特定位置插入特定字符串后,再对修改后的字符串进行md5运算. demo var crypto=require("crypto"); function cryptPw ...
- Largest Submatrix 3
Largest Submatrix 3 给出一个\(n\times m\)的网格图,第i行第j列上的格子有数字\(a[i][j]\),显然,你可以从中找到一个子矩阵,保证子矩阵中的数字互不相同,求子矩 ...
- PHP中session存储及删除变量的方法
Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用.但是session会话信息是临时的,在用户离开网站后就会被删除.如果需要永久储存信息,就需要把数据存储在数据库中. < ...
- Go: Println 与 Printf 的区别
Go 学习笔记:Println 与 Printf 的区别,以及 Printf 的详细用法 2017-12-19 15:39:05 zgh0711 阅读数 26255更多 分类专栏: Go 版权声明 ...