博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# await 到底等待的是什么?
阅读量:5060 次
发布时间:2019-06-12

本文共 1403 字,大约阅读时间需要 4 分钟。

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(2000);            Console.WriteLine("2 :::" + Thread.CurrentThread.ManagedThreadId);            Task tk1 = Task.Run(() =>            {                Thread.Sleep(2000);                Console.WriteLine("6 :::" + Thread.CurrentThread.ManagedThreadId);            });            Console.WriteLine("3 :::" + Thread.CurrentThread.ManagedThreadId);            Task tk2 = Task.Run(() =>            {                Thread.Sleep(5000);                Console.WriteLine("7 :::" + Thread.CurrentThread.ManagedThreadId);            });            Console.WriteLine("4 :::" + Thread.CurrentThread.ManagedThreadId);//主线程走到这里才返回.当然,tk1,tk2 已经开始执行了.            return tk2;        }

 

直接上结果 

 

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

 

转载于:https://www.cnblogs.com/refuge/p/8395349.html

你可能感兴趣的文章
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>