Example #1
0
        public void AddGoods_AddGoods_IncreasingTheNumberGoods() // При добавлении количество увеличивается на 1
        {
            // Организация
            int myMaxGoods = 10;
            Storage myStorage = new Storage(myMaxGoods, "SkladTest");
            Goods myTovar;
            int expected = myStorage.GetCount() + 1;

            // Действие
            myStorage.AddGoods(myTovar = new Goods());

            // Утверждение
            int actual = myStorage.GetCount();
            Assert.AreEqual(expected, actual, 0, "Количество товара не увеличивается!");
        }
Example #2
0
        // Построитель потоков
        public async Task ResultManufacturerAsync(Storage Sklad1, Storage Sklad2, int ChainLength, 
            int ThreadsManufactur, int ThreadsLogist, int ThreadsConsumer)
        {
            Task[] myTask = new Task[ThreadsManufactur + ThreadsLogist + ThreadsConsumer];  // Масив всех потоков
            RndArray(myTask);

            for (int i = 0; i < ThreadsManufactur; i++)
                myTask[i] = ManufacturerAsync(Sklad1, ChainLength);                         // Производители

            for (int i = ThreadsManufactur; i < ThreadsManufactur + ThreadsLogist; i++)
                myTask[i] = LogisticAsync(Sklad1, Sklad2, ChainLength);                     // Логисты

            for (int i = ThreadsManufactur + ThreadsLogist; i < ThreadsManufactur + ThreadsLogist + ThreadsConsumer; i++)
                myTask[i] = ConsumerAsync(Sklad2, ChainLength);                             // Покупатели

            await Task.WhenAll(myTask);     // Запуск всех потоков

            Console.WriteLine();
            Console.WriteLine("На 1 складе осталось {0} шт. товара:", Sklad1.GetCount());
            Console.WriteLine("На 2 складе осталось {0} шт. товара:", Sklad2.GetCount());
        }
Example #3
0
        private static int myMaxGoods           = 10;   // Объем склада

        static void Main(string[] args)
        {
            try
            {
                myChainLength       = int.Parse(ConfigurationManager.AppSettings[0]);
                myThreadsManufactur = int.Parse(ConfigurationManager.AppSettings[1]);
                myThreadsLogist     = int.Parse(ConfigurationManager.AppSettings[2]);
                myThreadsConsumer   = int.Parse(ConfigurationManager.AppSettings[3]);
                myMaxGoods          = int.Parse(ConfigurationManager.AppSettings[4]);
            }
            catch
            {
                Console.WriteLine("Ошибка чтения параметров! Будут применены параметры по умолчанию");
            }

            try
            {
                using (Storage mySklad1 = new Storage(myMaxGoods, "Sklad1"), mySklad2 = new Storage(myMaxGoods, "Sklad2"))
                {
                    FlowControlAsync myClassAsync = new FlowControlAsync(); // Клас потоков

                    Console.WriteLine("На складе 1 товар в количестве: {0} шт.", mySklad1.GetCount());
                    Console.WriteLine("На складе 2 товар в количестве: {0} шт.", mySklad2.GetCount());
                    Console.WriteLine();

                    // Вызов построителя потоков
                    Task task = myClassAsync.ResultManufacturerAsync(mySklad1, mySklad2, myChainLength, myThreadsManufactur,
                        myThreadsLogist, myThreadsConsumer);
                    task.Wait();
                }
        }
            catch (Exception ex)
            {
                Console.WriteLine("Исключение при работе: " + ex.Message);
            }

    Console.WriteLine("Press any key to continue . . . ");
            Console.ReadKey(true);
        }