为什么task.run不按c#中的执行顺序打印输出

时间:2018-09-26 10:46:29

标签: c# task

       Thread.CurrentThread.Name = "Main";
        // Define and run the task.
        Task taskA = Task.Run(() => Console.WriteLine("Hello from taskA."));
        // Output a message from the calling thread.
        Console.WriteLine("Hello from thread '{0}'.",
                            Thread.CurrentThread.Name);
        taskA.Wait();

为什么在“来自线程Main的Hello”之后打印“来自taskA的hello”

1 个答案:

答案 0 :(得分:1)

Task.Run创建一个新的踏板,以执行从中传递的代码。计划由TaskScheduler和.NET和OS中最深处的一些Thread Management来完成这项工作。 哪个代码真正先执行可能是不确定的(即无法保证),这就是所谓的“竞赛条件”。但是实际上,启动新线程和执行代码的开销几乎肯定会比原线程执行下一行所花费的时间更长。因此,在“实例”中,它可能总是第二执行。