Task.Run不同的第二次执行

时间:2015-04-09 02:37:47

标签: c# task-parallel-library

我是C#newbie。

问题:

class Program
{
    static void why()
    {
        List<Task> listOfDummyTask = new List<Task>();
        for (int i = 0; i < 100; ++i)
        {
            Task hoho = Task.Run(() =>
            {
                Thread.Sleep(2000);
                Console.WriteLine("Die");
            });
            listOfDummyTask.Add(hoho);
        }
        Task.WaitAll(listOfDummyTask.ToArray());
    }

    static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();

        sw.Reset();
        sw.Start();
        why();
        sw.Stop();
        Console.WriteLine("{0} ms", sw.ElapsedMilliseconds.ToString());
        Console.WriteLine("----------------------------------");

        sw.Reset();
        sw.Start();
        why();
        sw.Stop();
        Console.WriteLine("{0} ms", sw.ElapsedMilliseconds.ToString());
        Console.WriteLine("----------------------------------");

        Console.WriteLine("End");
    }
}

首先,我打电话给为什么(),它打印&#34;死&#34;同样4次。

它打印1~4&#34; Die&#34;。

首先为什么()秒表返回28,000毫秒,但当我调用秒时为什么(),

它打印&#34; Die&#34; 8次,它打印5~8&#34; Die&#34;同一时间..

第二个为什么()秒表返回10,000~14,000毫秒。

为什么?

它的关键词是什么?

1 个答案:

答案 0 :(得分:0)

Task.Run循环100次会将100个工作项排入默认调度程序(线程池)。如果线程池决定同时执行最多4个项目,那么它将从队列中取出4个工作项并在大约2秒内完成它们。然后它将需要四个,依此类推,直到完成所有工作。

没有真正期望同时执行多少任务,以及将推迟多少任务。