分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

.NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态

发布时间:2023-09-06 02:18责任编辑:傅花花关键词:.NET

.NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态?答案是:WaitingForActivation

新建一个.NET Core控制台程序,输入如下代码:

class Program{ ???static void Main(string[] args) ???{ ???????//启动outer task,然后在outer task里面启动inner task ???????var outerTask = Task.Run(async () => ???????{ ???????????//await 之前执行 ???????????Console.WriteLine("Outer task began!"); ???????????//启动inner task ???????????var innerTask = Task.Run(() => ???????????{ ???????????????//inner task 的线程沉睡5秒 ???????????????Thread.Sleep(5000); ???????????}); ???????????//输出outer task即将开始await ???????????Console.WriteLine("Outer task will await!"); ???????????await innerTask;//在outerTask的线程中await innerTask的Task线程 ???????????//await 完成之后执行 ???????????Console.WriteLine("Outer task will be finished!"); ???????}); ???????Thread.Sleep(1000);//主线程沉睡1秒,之后outer task的线程肯定开始执行了 ???????Console.WriteLine($"Outer task status:{outerTask.Status.ToString()}");//检查outer task的状态,可以看到此时状态为WaitingForActivation ???????Thread.Sleep(6000);//沉睡6秒,之后outer task和inner task的线程肯定结束执行了,也就是说outerTask和innerTask应该都结束了 ???????Console.WriteLine($"Outer task status:{outerTask.Status.ToString()}");//再次检查outer task的状态,可以看此时状态为RanToCompletion ???????Console.WriteLine(); ???????Console.WriteLine(); ???????Console.WriteLine("Press key contiune..."); ???????Console.ReadKey(); ???}}

执行结果如下:

所以如果一个task在await另一个task,那么其状态就是WaitingForActivation

.NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态

原文地址:https://www.cnblogs.com/OpenCoder/p/9794938.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved