public void BuyThing(Thing thing, int quantity, string thingID, ref ConcurrentDictionary<string,  Thing> things)
        {
            //     StockController thingStockController = new StockController(_things);
            ////    things.AddOrUpdate(thingID, thing, (key, val) => { thing.quantity = thing.quantity + quantity; return thing; });// oldThing.quantity
            things.AddOrUpdate(thingID, thing, (key, val) => { thing.quantity = thing.quantity + 100; return thing; });// oldThing.quantity
               //     Interlocked.Add(ref _totalQuantityBought, thing.quantity);                                                                                                     //  thingStockController.showThings();
            //foreach (var thingy in things)
            //{
            //    Console.WriteLine("thing: key " + thingy.Key + " value: " + thingy.Value.name + " price: " + thingy.Value.price
            //            + " Quantity: " + thingy.Value.quantity);
            //    Console.ReadLine();

            //}
        }
        public void BuyThing(Thing thing, int quantity)
        {
            //things.AddOrUpdate(3, newThing, (key, oldvalue) => newThing);

            _stock.AddOrUpdate("brightshinyThing", thing, (key, val) => { thing.quantity = thing.quantity + quantity;  return thing; });// oldThing.quantity
        }
 private static void GetOrAdd(ConcurrentDictionary<string, Thing> things)
 {
     Thing newerThing = new Thing();
     newerThing.ID = 10; newerThing.name = "newestThing"; newerThing.price = 99.99;
     Thing think = things.GetOrAdd("wingdingThing", newerThing);
     Console.WriteLine(think.ID.ToString() + " " + think.name + " ", think.price);
 }
        private static void AddorUpdate(ConcurrentDictionary<string, Thing> things)
        {
            Thing newThing = new Thing();
            newThing.ID = 3; newThing.name = "fourthThing"; newThing.price = 85.54;
            //to return the value just added, use the return value. Any later retrieval of this indexed item
            //could have been changed by another thread.
            Thing think = things.AddOrUpdate("worthlessThing", newThing, (key, oldvalue) => newThing);

            Console.WriteLine(think.ID.ToString() + " " + think.name + " ", think.price);
        }
        public void test_BuyThings()
        {
            // var stockController = new
            var stockController = new ConcurrentCollections.StockController();
              //      stockController.LoadCurrentStock();
            //  ConcurrentDictionary<string, ConcurrentCollections.Thing> stock = new ConcurrentDictionary<string, ConcurrentCollections.Thing>();
            //  stock = prog.GetCurrentStock();

            //Add five items to the Things collection
            var Thing1 = new ConcurrentCollections.Thing()
            {
                ID = 1111,
                name = "UnitTest1Thing",
                price = 11.11,
                quantity = 0
            };
            var Thing2 = new ConcurrentCollections.Thing()
            {
                ID = 2222,
                name = "UnitTest2Thing",
                price = 22.22,
                quantity = 0
            };

            var Thing3 = new ConcurrentCollections.Thing()
            {
                ID = 3333,
                name = "UnitTest3Thing",
                price = 33.33,
                quantity = 0
            };

            var Thing4 = new ConcurrentCollections.Thing()
            {
                ID = 4444,
                name = "UnitTest4Thing",
                price = 44.44,
                quantity = 0
            };

            var Thing5 = new ConcurrentCollections.Thing()
            {
                ID = 5555,
                name = "UnitTest5Thing",
                price = 55.55,
                quantity = 0
            };
            //first, add items to collection with zero inventory

            //Task t1 = Task.Run(() => stockController.BuyThing(Thing1, 0, "UnitTestThing"));
            //Task t2 = Task.Run(() => stockController.BuyThing(Thing2, 0, "UnitTestThing"));
            //Task t3 = Task.Run(() => stockController.BuyThing(Thing3, 0, "UnitTestThing"));
            //Task t4 = Task.Run(() => stockController.BuyThing(Thing4, 0, "UnitTestThing"));
            //Task t5 = Task.Run(() => stockController.BuyThing(Thing5, 0, "UnitTestThing"));

            //stockController.BuyThing(Thing1, 0, "UnitTestThing1", _testThings);
            //stockController.BuyThing(Thing2, 0, "UnitTestThing2", _testThings);
            stockController.BuyThing(Thing3, 0, "UnitTestThing3", ref _testThings);
            //stockController.BuyThing(Thing4, 0, "UnitTestThing4", _testThings);
            //stockController.BuyThing(Thing5, 0, "UnitTestThing5", _testThings);

            TimeSpan workDay = new TimeSpan(0,10,0);
            simulateWork(stockController, workDay);
            foreach (var thingy in _testThings)
            {
                Console.WriteLine("thing: key " + thingy.Key + " value: " + thingy.Value.name + " price: " + thingy.Value.price
                        + " Quantity: " + thingy.Value.quantity);
                Console.ReadLine();

            }
        }
 private void simulateWork(StockController stockController, TimeSpan workDay)
 {
     Random rand = new Random();
     DateTime start = DateTime.Now;
     while  (DateTime.Now - start < workDay)
     {
         Thread.Sleep(rand.Next(100));
         bool buy = (rand.Next(6) == 0);
         // string itemName =
         //   if (buy)
         if (true)
         {
             int quantity = rand.Next(9) + 1;
             var thing = new ConcurrentCollections.Thing()
             {
                 ID = 3333,
                 name = "UnitTestThing3"
                 //price = 33.33,
                 //quantity = quantity
             };
             stockController.BuyThing(thing, quantity, "UnitTestThing3", ref _testThings);
         }
     }
 }