首页 新闻 会员 周边

关于 Task 多线程的问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-10-26 18:36
        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是间隔了点时间一个个执行的, 这种情况不对啊。

jerry128的主页 jerry128 | 初学一级 | 园豆:31
提问于:2014-10-11 18:31
< >
分享
最佳答案
0

你的环境应该是4个逻辑处理器,这个同时处理你的前四个task所以看到前四个结果是一起显示的

收获园豆:5
Cherbim | 菜鸟二级 |园豆:323 | 2014-10-12 22:37

1.确实是4个,不过按道理前面4个跑了以后,后面也应该是4个一起跑的,但实际是一个个跑的 

2.如果把 Task 换成 Thread 就会变成 10 个线程几乎同时启动的, 都是多线程的,为什么会有差距

jerry128 | 园豆:31 (初学一级) | 2014-10-13 13:46

@xmj112288: 不是的,先进入线程池的先执行。这个看task原理吧

Cherbim | 园豆:323 (菜鸟二级) | 2014-10-13 15:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册