using System.Collections.Generic;
using System.Threading.Tasks;
private static IList<int> items = Enumerable.Range(1, 80).ToArray();
private static int _millisecondsDelay = 500;
private const int MaxOfParall = 5;
private static int cont = 0;
private static int contFor = 1;
public static async Task Main()
await RunParallelForEach();
Console.WriteLine("***Total cont="+cont);
private static async Task RunParallelForEach()
var timerParallel = System.Diagnostics.Stopwatch.StartNew();
var options = new ParallelOptions() { MaxDegreeOfParallelism = MaxOfParall };
Parallel.ForEach(items, options, item =>
System.Threading.Thread.Sleep(_millisecondsDelay);
Console.WriteLine("Next Parallel.ForEach"+contFor++);
Console.WriteLine("Parallel.ForEach Elapsed (s): "+timerParallel.Elapsed.TotalSeconds);
private static async Task LogItemAndThread(int item)
var threadId = Thread.CurrentThread.ManagedThreadId.ToString().PadRight(4, ' ');
Console.WriteLine(cont+".-ManagedThreadId "+threadId+": "+item);
private static async Task RunNormalForEach()
var timerNormal = System.Diagnostics.Stopwatch.StartNew();
foreach (var item in items)
System.Threading.Thread.Sleep(_millisecondsDelay);
await LogItemAndThread(item);
Console.WriteLine("Next Normal foreach:");
Console.WriteLine("foreach Elapsed (s): {timerNormal.Elapsed.TotalSeconds:N2}");