希望在编程上有些许提高所以 最近连续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 异步编程说明的更多相关文章

  1. 【转】C# Async/Await 异步编程中的最佳做法

    Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...

  2. .NET Web应用中为什么要使用async/await异步编程

    前言 什么是async/await? await和async是.NET Framework4.5框架.C#5.0语法里面出现的技术,目的是用于简化异步编程模型. async和await的关系? asy ...

  3. C#中 Thread,Task,Async/Await 异步编程

    什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调 ...

  4. async/await 异步编程(转载)

    转载地址:http://www.cnblogs.com/teroy/p/4015461.html 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入 ...

  5. async/await 异步编程

    前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关的知识,并整理成这篇博客,如果在 ...

  6. c# async/await异步编程死锁的问题

    在异步编程中,如果稍有不注意,就会造成死锁问题.何为死锁:即两个以上的线程同时争夺被互相锁住的资源,两个都不放手. 在UI或asp.net中,容易造成死锁的代码如下所示: private void b ...

  7. c# 关于async/await异步编程的浅析和使用

    线程的同步运行,时效性慢,异步运行,时效性快! 在c#5.0引出了async/await关键字,可以用其来进行异步编程. async/await定义异步方法的语法如下: 1.在方法的返回类型前面加上a ...

  8. .NET 中的 async/await 异步编程

    原文出处: Teroy 的博客 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关 ...

  9. ASP.Net中的async+await异步编程

    在.NET Framework4.5框架.C#5.0语法中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简 ...

随机推荐

  1. 39-python基础-python3-字典常用方法-get()

    在访问一个键的值之前,检查该键是否存在于字典中,这很麻烦. 好在,字典有一个 get()方法,它有两个参数:要取得其值的键,以及如果该键不存在时,返回的备用值. dict.get(键,默认值) 实例- ...

  2. 我的scoi2018

    高一,很尴尬,凉~ -------- 大家好,我是分界线,我弱弱的说本次采用倒序的写作手法 -------- 故事是这样讲的: Day0: 刚刚去那个电科搞的集训,早上才考了一波模拟赛,下午就过来住酒 ...

  3. Linux 登录、注销与关机

    Linux 登录.注销与关机 这里主要学习的是命令行环境下的相关操作. 一.登录 Linux 默认的情况下会提供六个终端来让用户登录,切换的方式为使用:[Ctrl + Alt + F1 ~ F6]的组 ...

  4. Oracle 五笔码函数

    五笔码 select comm.fun_spellcode_wb('数据库') from dual 结果:ORY 函数 CREATE OR REPLACE FUNCTION COMM.FUN_SPEL ...

  5. 前端学习(十四)js回顾和定时器(笔记)

    回顾知识点:    作用域:        1.全局变量:在任何位置都可以使用的变量        2.局部变量:只能在函数内部使用的变量        3.闭包:子函数可以使用父函数的局部变量 -- ...

  6. js关闭当前窗口的几种方法

    第一种:不带任何提示关闭窗口的js代码 <a href="javascript:window.opener=null;window.open('','_self');window.cl ...

  7. Unity HOME

    { https://unity.com/cn?_ga=2.134655153.1528856053.1574826116-818341090.1574826116 }

  8. PHP ftp_pwd() 函数

    定义和用法 ftp_pwd() 函数返回指定 FTP 连接的当前目录名称. 语法 ftp_pwd(ftp_connection) 参数 描述 ftp_connection 必需.规定要使用的 FTP ...

  9. onethink中的用户登录session签名

    用户登录签名问题,即防止伪造登录session,增加一个用户登录数组的加密签名 onethink的登录控制,先调用UC表中(UC表也是存储在网站或本地的数据库中的),确认登录信息.如果UC表登录成功, ...

  10. JVM典型配置和调优举例

    1. 堆设置-Xms: :初始堆大小.-Xmx: :最大堆大小.-XX:NewSize=n: :设置年轻代大小.-XX:NewRatio=n: : :设置年轻代和年老代的比值.如:为 3,表示年轻代与 ...