按照MSDN Documentation TaskFactory.StartNew它创建并启动任务。因此,对于下面的代码示例为什么TaskFactory.StartNew Task没有立即启动?
class Program
{
public static void Main()
{
var t =Task.Factory.StartNew(
() => SomeLongRunningCalculation(10, Display)
);
var t1 = Task.Factory.StartNew(
() => SomeLongRunningCalculation(20, Display)
);
Console.WriteLine("Invoked tasks");
Task.WaitAll(t, t1);
Console.ReadLine();
}
public static void Display(int value)
{
Console.WriteLine(value);
}
public static void SomeLongRunningCalculation(int j, Action<int> callBack)
{
Console.WriteLine("Invoking calculation for {0}", j);
System.Threading.Thread.Sleep(1000);
if (callBack != null)
{
callBack(j + 1);
}
}
}
我预计产量为
Invoking calculation for 10 Invoking calculation for 20 Invoked tasks 11 21
但是,它显示
Invoked tasks Invoking calculation for 20 Invoking calculation for 10 21 11
我想学习
- 为什么StartNew后任务没有立即运行?
- 我该怎么做才能以预期的格式获得输出?
+1表示“线程调度是非确定性的”。 – Ramesh 2012-04-23 02:06:38