static void Main(string[] args)
        {
            StaffLogsForBonuses staffLogs = new StaffLogsForBonuses();
            ToDoQueue           toDoQueue = new ToDoQueue(staffLogs);

            SalesPerson[] people = { new SalesPerson("Kiran"),
                                     new SalesPerson("Ratan"),
                                     new SalesPerson("Vishal") };

            var controller = new StockController(toDoQueue);

            var workDay = new TimeSpan(0, 0, 1);

            var t1 = Task.Run(() => people[0].Work(controller, workDay));
            var t2 = Task.Run(() => people[1].Work(controller, workDay));
            var t3 = Task.Run(() => people[2].Work(controller, workDay));

            var bonusLogger  = Task.Run(() => toDoQueue.MonitorAndLogTrades());
            var bonusLogger2 = Task.Run(() => toDoQueue.MonitorAndLogTrades());

            Task.WaitAll(t1, t2, t3);

            toDoQueue.CompleteAdding();

            Task.WaitAll(bonusLogger, bonusLogger2);

            controller.DisplayStatus();
            staffLogs.DisplayReport(people);

            Console.ReadKey();
        }
 public StockController(ToDoQueue bonusCalculator)
 {
     this.stock     = new ConcurrentDictionary <string, int>();
     this.toDoQueue = bonusCalculator;
 }