Пример #1
0
        public void TestDuplicateRegistration()
        {
            var d1 = new Dataflow(DataflowOptions.Default);
            var d2 = new Dataflow(DataflowOptions.Default);

            d1.RegisterChild(d2);
            d1.RegisterChild(d2);
        }
Пример #2
0
        public void TestCircularDependency()
        {
            var d1    = new Dataflow(DataflowOptions.Default);
            var d2    = new Dataflow(DataflowOptions.Default);
            var block = new ActionBlock <int>(i => { });

            d2.RegisterChild(block);

            d1.RegisterChild(d2);
            d2.RegisterChild(d1);
        }
Пример #3
0
        public async Task TestDuplicateRegistration2()
        {
            var d1 = new Dataflow(DataflowOptions.Default);
            var d2 = new Dataflow(DataflowOptions.Default);

            var block = new ActionBlock <int>(i => { });

            d2.RegisterChild(block);
            d1.RegisterChild(d2);
            d1.RegisterChild(d2, allowDuplicate: true);

            Task.Run(
                async() =>
            {
                await Task.Delay(500);
                block.Complete();
            });

            await d1.CompletionTask;
            await d2.CompletionTask;
        }
Пример #4
0
        public async Task TestCleanUpOnFault()
        {
            var f = new MyDataflow <int>()
            {
                Name = "dataflow1"
            };

            f.m_block2.RegisterChild(new BufferBlock <int>());

            Task.Run(
                async() =>
            {
                await Task.Delay(200);
                (f.m_block2.InputBlock).Fault(new InvalidOperationException());
            });

            var f2 = new Dataflow(DataflowOptions.Default)
            {
                Name = "dataflow2"
            };

            f2.RegisterChild(f.m_block1);
            f2.RegisterChild(f.m_block2);

            var f3 = new Dataflow(DataflowOptions.Default)
            {
                Name = "dataflow3"
            };

            f3.RegisterChild(f);
            f3.RegisterChild(f2);

            await this.AssertFlowError <InvalidOperationException>(f);

            Assert.AreEqual(-1, f.cleanUpSignal);

            await this.AssertFlowError <InvalidOperationException>(f2);

            await this.AssertFlowError <InvalidOperationException>(f3);
        }