using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; class Program { static void Main(string[] args) { Console.WriteLine("*** WITHOUT throttling ***"); MeasureWork(false); Console.WriteLine("*** WITH throttling ***"); MeasureWork(true); } private static void MeasureWork(bool throttle) { TaskScheduler scheduler = throttle ? new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, Environment.ProcessorCount * 2).ConcurrentScheduler : TaskScheduler.Default; Console.WriteLine("Race has begun."); var sw = Stopwatch.StartNew(); var workerTasks = new Task[800]; for (int i = 0; i < workerTasks.Length; i++) { workerTasks[i] = Task.Factory.StartNew(Work, CancellationToken.None, TaskCreationOptions.None, scheduler); } Task allFinished = Task.WhenAll(workerTasks); allFinished.ContinueWith(_ => sw.Stop()); while (!allFinished.IsCompleted) { Thread.Sleep(500); Console.WriteLine("Threadpool responded in: " + MeasureThreadPoolResponsiveness()); } Console.WriteLine($"FINISHED in {sw.Elapsed}"); } static void Work() { SpinWait.SpinUntil(() => false, 40); } static TimeSpan MeasureThreadPoolResponsiveness() { var sw = Stopwatch.StartNew(); Task.Run(() => sw.Stop()).Wait(); return sw.Elapsed; } }