码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-10-15 23:17:34      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:rgs   nbsp   pre   async   adk   就是   void   tin   完成   

.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是什么状态

标签:rgs   nbsp   pre   async   adk   就是   void   tin   完成   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!