public void RunBlockingCollectionCodeSample()
        {
            Console.WriteLine("Tasks started...");

            DateTime start = DateTime.Now;

            WorkQueue workQueue = new WorkQueue(new ConcurrentQueue<WorkTask>());
            WorkItemProducer producerOne = new WorkItemProducer(workQueue);

            Task producerTaskOne = Task.Run(() => producerOne.ProduceWorkItems());

            Task[] taskConsumerArray = new Task[5];
            for(int i =0; i < taskConsumerArray.Length; i++)
            {
                taskConsumerArray[i] = Task.Run(() => workQueue.MonitorWorkQueue());
            }
            Task.WaitAll(producerTaskOne);
            workQueue.AllItemsAdded();
            Console.WriteLine("added all");
            Task.WaitAll(taskConsumerArray);
            Console.WriteLine("Tasks are finished...");
            Console.WriteLine(string.Format("Finished in {0} seconds", (DateTime.Now - start).TotalSeconds));
        }
 public WorkItemProducer(WorkQueue workQueue)
 {
     this.workQueue = workQueue;
 }