static void Main(string[] args)
{
Print();
Console.WriteLine("5 :::" + Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();
} public static async void Print()
{
Console.WriteLine("1 :::" + Thread.CurrentThread.ManagedThreadId);
await PrintAsync();//主线程走到这里的时候并没有返回.所谓返回,是指从当前 async 方法内部返回到调用该方法的位置继续往下执行
Console.WriteLine("8 :::" + Thread.CurrentThread.ManagedThreadId);//由于 PrintAsync() 方法返回的是 tk2,所以这里要等 tk2 执行完毕才会执行.
} public static Task PrintAsync()
{
Thread.Sleep();
Console.WriteLine("2 :::" + Thread.CurrentThread.ManagedThreadId);
Task tk1 = Task.Run(() =>
{
Thread.Sleep();
Console.WriteLine("6 :::" + Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("3 :::" + Thread.CurrentThread.ManagedThreadId);
Task tk2 = Task.Run(() =>
{
Thread.Sleep();
Console.WriteLine("7 :::" + Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("4 :::" + Thread.CurrentThread.ManagedThreadId);//主线程走到这里才返回.当然,tk1,tk2 已经开始执行了.
return tk2;
}

直接上结果

之前一直理解的是,await 等待的是后面紧跟着的方法,实际等待的是  这个方法返回的 Task 执行完毕,而这个方法里面的非 task 代码依然是同步执行.

c# aynsc 和 await的更多相关文章

  1. Async 与 Await 关键字研究

    1        Aynsc 和 Await 关键字的研究 在 .NET 4.0 以后,基于 Task 的异步编程模式大行其道,因其大大简化了异步编程所带来的大量代码工作而深受编程人员的欢迎,如果你曾 ...

  2. C#多线程和异步(二)——Task和async/await详解(转载)

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

  3. C#多线程和异步——Task和async/await详解

    阅读目录 一.什么是异步 二.Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 3 Task的延续操作(WhenAny/WhenAll/Cont ...

  4. async & await 的前世今生(Updated)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  5. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  6. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  7. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  8. [C#] 走进异步编程的世界 - 开始接触 async/await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  9. [译] C# 5.0 中的 Async 和 Await (整理中...)

    C# 5.0 中的 Async 和 Await [博主]反骨仔 [本文]http://www.cnblogs.com/liqingwen/p/6069062.html 伴随着 .NET 4.5 和 V ...

随机推荐

  1. python socket知识点

    ---恢复内容开始--- 数据在网络上进行传播,需要通过一种通信协议.常见的通信协议有:HTTP,SMTP,DNS,FTP,SSH,SNMP,ICMP PING,DNCP. OSI(Open Syst ...

  2. 解决PhpMyadmin1440秒未活动自动退出

    解决方法如下:#vim phpMyAdmin/libraries/config.default.php找到如下位置$cfg['LoginCookieValidity'] = ;    将1440修改成 ...

  3. 深入java虚拟机学习 -- 类的加载机制(四)

    类加载的命名空间 每个类加载器都有自己的命名空间,命名空间由所有以此加载器为初始类加载器的类组成,不同命名空间的两个类是不可见的,但只要得到类所对应的Class对象的refrence(反射),还是可以 ...

  4. 为 Debian 8 或 Debian 9(64 位)安装 .NET Core

    在 Debian 8 或 Debian 9(64 位)上安装 .NET Core 的具体步骤: 备注:必须有用户控制目录,才能通过 tar.gz 在 Linux 系统上进行安装. 1.准备一台刚安装的 ...

  5. windows下远程访问Redis,windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效,Windows Redis requirepass不生效,windows下远程访问redis的配置

    转载:http://fanshuyao.iteye.com/blog/2384074 一.Redis下载地址: https://github.com/MicrosoftArchive/redis/re ...

  6. Php显示中文时乱码

    <?php echo "你们好哈"; ?> 显示乱码,解决办法 <?php header("content-type:text/html; charse ...

  7. 对于最近线上服务以及京东等大型互联网公司对java工程师要求的一些思考

    当下线上服务为了减少上线,经常搞成配置化,配置化对于版本以及持续集成本身是很大破坏,对于此,我个人持保留态度, 是反对过多东西进行配置化,其实配置化本身没有什么问题,关键是动态对配置进行修改而没有与代 ...

  8. Java设计模式(一)工厂模式

    一.场景描述 仪器数据文件的格式包含Pdf.Word.Excel等多种,不同种格式的文件其数据的采集方式不同,因此定义仪器数据采集接口,并定义PDF.Excel等不同的数据采集类实现该接口. 通过工厂 ...

  9. 初探云服务器ECS(Linux系统)

    PS: 购买的阿里云服务器(ECS,Linux系统),使用的弹性公网IP(EIP). 一.使用Xshell链接ECS 1.将公网IP填入主机即可 2.用户名一般为root,密码是自己设置的,填入即可. ...

  10. js对象系列【二】深入理解js函数,详解作用域与作用域链。

    这次说一下对象具体的一个实例:函数,以及其对应的作用域与作用域链.简单的东西大家查下API就行了,这里我更多的是分享自己的理解与技巧.对于作用域和作用域链,相信绝大多数朋友看了我的分享都能基本理解,少 ...