using System.Threading.Tasks;
ThreadPool.SetMinThreads(4, 4);
Task[] tasks = new[] { 'A', 'B' }.Select(name => Task.Run(() =>
Thread.Sleep(100); if (name == 'B') Thread.Sleep(500);
Print($"{name}-Starting");
var options = new ParallelOptions() { MaxDegreeOfParallelism = 10 };
Parallel.ForEach(Enumerable.Range(1, 10), options, item =>
Print($"{name}-Processing #{item}");
Print($"{name}-Finished");
static void Print(string line)
Console.WriteLine($@"{DateTime.Now:HH:mm:ss.fff} [{Thread.CurrentThread
.ManagedThreadId}] > {line}");