Пример #1
0
        public virtual void SyncBarrier()
        {
            int expected = 3;

            using (IChannel <int> c0 = new mq.Channel <int>("test-SyncBarrier1" + Salt))
                using (IChannel <int> c1 = new mq.Channel <int>("test-SyncBarrier2" + Salt))
                    using (IChannel <int> c2 = new mq.Channel <int>("test-SyncBarrier3" + Salt))
                    {
                        Task.Factory.StartNew(() =>
                        {
                            Thread.Sleep(Timeblok);
                            c0.Write(expected);
                        });
                        Task.Factory.StartNew(() =>
                        {
                            Thread.Sleep(2 * Timeblok);
                            c1.Write(expected);
                        });
                        Task.Factory.StartNew(() =>
                        {
                            Thread.Sleep(3 * Timeblok);
                            c2.Write(expected);
                        });

                        IEnumerable <IChannelReader <int> > res = c0.BarrierWith(c1, c2);
                        CollectionAssert.AreEquivalent(new IChannelReader <int>[] { c0, c1, c2 }, res.ToArray());
                        foreach (IChannelReader <int> item in res)
                        {
                            Assert.AreEqual(expected, item.Read());
                        }
                    }
        }