 <p>The problem is it takes a while for the scheduler to start the new tasks as it tries to determine if a task is long-running. You can tell the TPL that a task is long running as a parameter of the task:</p> <pre><code>for (int index = 0; index &lt; numberOfTasks; index++) { int capturedIndex = index; rudeTasks.Add(Task.Factory.StartNew(() =&gt; { Console.WriteLine("Starting rude task {0} at {1}ms", capturedIndex, timer.ElapsedMilliseconds); Thread.Sleep(3000); }, TaskCreationOptions.LongRunning)); } </code></pre> <p>Resulting in:</p> <pre><code>Starting rude task 0 at 11ms Starting rude task 1 at 13ms Starting rude task 2 at 15ms Starting rude task 3 at 19ms Short-running task 0 running at 45ms Short-running task 1 running at 45ms Short-running task 2 running at 45ms Short-running task 3 running at 45ms Finished waiting for short tasks at 46ms Finished waiting for rude tasks at 3019ms </code></pre>