using System.Collections.Concurrent;
using System.Threading.Tasks;
using System.Collections.Generic;
private static BlockingCollection<Task<int>> BlockingCollection {get;set;}
public static void Producer(int numTasks)
Random r = new Random(7);
for(int i = 0 ; i < numTasks ; i++)
Task<int> task = new Task<int>(()=>
Thread.Sleep(r.Next(100));
Console.WriteLine("Produced: " + closured);
BlockingCollection.Add(task);
BlockingCollection.CompleteAdding();
public static void Main()
BlockingCollection = new BlockingCollection<Task<int>>(maxParallelism);
Task.Factory.StartNew(()=> Producer(numTasks));
foreach(var task in BlockingCollection.GetConsumingEnumerable())
Console.WriteLine(" Consumed: "+ task.Result);