Aspectacular.Test.RunCounter.SpinParallel C# (CSharp) Method

SpinParallel() public static method

Runs given function in parallel on multiple tasks. Number of tasks spawned matches number of logical processors.
public static SpinParallel ( long millisecondsToRun, System.Action funcToTest ) : long
millisecondsToRun long
funcToTest System.Action
return long
        public static long SpinParallel(long millisecondsToRun, Action funcToTest)
        {
            Task<long>[] tasks = new Task<long>[Environment.ProcessorCount];

            for(int i = 0; i < Environment.ProcessorCount; i++)
            {
                tasks[i] = new Task<long>(() => Spin(millisecondsToRun, funcToTest));
            }

            DateTime start = DateTime.UtcNow;

            tasks.ForEach(task => task.Start());
            // ReSharper disable once CoVariantArrayConversion
            Task.WaitAll(tasks);

            long ranMillisec = (long)(DateTime.UtcNow - start).TotalMilliseconds;
            Debug.WriteLine("Parallel call counting run time mismatch is {0:#,#} milliseconds.", ranMillisec - millisecondsToRun);

            long[] runCounts = tasks.Select(thread => thread.Result).ToArray();
            long total = runCounts.Sum();
            return total;
        }