Ejemplo n.º 1
0
        public static async Task Take_AtThread_2(Adapter_ProducerConsumer <TItem> buffer, HashSet <TItem> addSerial)
        {
            Assert.IsTrue(buffer.Count == 0);

            TItem first  = addSerial.ElementAt(0);
            TItem second = addSerial.ElementAt(1);

            AddState <TItem> addState_First  = new AddState <TItem>(buffer, first);
            AddState <TItem> addState_Second = new AddState <TItem>(buffer, second);

            Timer timerReaction_First  = new Timer(TimeOut_AddAction, addState_First, DelayWait, Timeout.Infinite);
            Timer timerReaction_Second = new Timer(TimeOut_AddAction, addState_Second, DelayWaitDouble, Timeout.Infinite);

            ResultDouble <TItem> result = await buffer.Take_AtThread_2();

            Assert.IsTrue(buffer.Count == 0);

            if (result.Value_1.Equals(first))
            {
                Assert.IsTrue(result.Value_2.Equals(second));
            }
            else
            {
                Assert.IsTrue(result.Value_1.Equals(second));
                Assert.IsTrue(result.Value_2.Equals(first));
            }
        }
Ejemplo n.º 2
0
        public async Task Add_AtThread_2(T item_1, T item_2)
        {
            ResultDouble <T> result = new ResultDouble <T>();

            _countThread++;
            _tableThread.AddOrUpdate(_countThread, true, (i, b) => { return(true); });

            Thread threadFirst = new Thread(new ParameterizedThreadStart(AddAction));

            threadFirst.IsBackground = true;
            ItemChangeState <T> parameterFirst = new ItemChangeState <T>()
            {
                KeyThread = _countThread,
                Item      = item_1
            };

            _countThread++;
            _tableThread.AddOrUpdate(_countThread, true, (i, b) => { return(true); });

            Thread threadSecond = new Thread(new ParameterizedThreadStart(AddAction));

            threadSecond.IsBackground = true;
            ItemChangeState <T> parameterSecond = new ItemChangeState <T>()
            {
                KeyThread = _countThread,
                Item      = item_2
            };

            threadFirst.Start(parameterFirst);
            threadSecond.Start(parameterSecond);

            result.Value_1 = await Task <T> .Run(
                () =>
            {
                while (_tableThread[parameterFirst.KeyThread])
                {
                }
                return(parameterFirst.Item);
            }
                );

            result.Value_2 = await Task.Run(
                () =>
            {
                while (_tableThread[parameterSecond.KeyThread])
                {
                }
                return(parameterSecond.Item);
            }
                );
        }