private static void Main(string[] args) { Task[] tasks=new Task[10]; for (int i = 0; i < 10; i++) { int i1 = i; tasks[i1] = Task.Factory.StartNew(() => TaskWork(i1)); } Console.ReadLine(); } private static void TaskWork(int i) { Console.WriteLine("i=" + i); int length = i + 5; for (; i < length; i++) { Thread.Sleep(100000); // 测试代码 Console.WriteLine(i); } }
代码如上, 我开了10个 Task ,程序跑的时候,应该这 10 个 Task 是同时进行的(微小的时间差不算), 但实际运行结果是 有 4个Task同时执行了,后续的Task是间隔了点时间一个个执行的, 这种情况不对啊。
你的环境应该是4个逻辑处理器,这个同时处理你的前四个task所以看到前四个结果是一起显示的
1.确实是4个,不过按道理前面4个跑了以后,后面也应该是4个一起跑的,但实际是一个个跑的
2.如果把 Task 换成 Thread 就会变成 10 个线程几乎同时启动的, 都是多线程的,为什么会有差距
@xmj112288: 不是的,先进入线程池的先执行。这个看task原理吧