コード例 #1
0
        public void ConcurrentUpdateOfTwoSeparateGraphsAreNotLabeledAsConcurrent()
        {
            using var goAhead = new ManualResetEvent(false);
            var v1 = new AssignablePipelineStage <int>("", 1);
            var v2 = new AssignablePipelineStage <int>("", 3);

            var g1 = PipelineReactions.Create(_ => Wait(goAhead, 1000), v1);
            var g2 = PipelineReactions.Create(_ => Wait(goAhead, 1000), v2);

            Task.Run(() => v1.SetValue(1001));
            goAhead.WaitOne();
            Assert.DoesNotThrow(() => v2.SetValue(1001));
        }
コード例 #2
0
ファイル: Testing.cs プロジェクト: lanicon/Viking.Pipeline
        public static void Test()
        {
            var one = 1.AsPipelineConstant();
            var two = 2.AsPipelineConstant();

            var value               = new AssignablePipelineStage <int>("integer", 0);
            var suspension          = new AssignablePipelineStage <PipelineSuspensionState>("suspender", PipelineSuspensionState.Resume);
            var changeableOperation = new AssignablePipelineStage <Func <int, int> >("suspender", a => a);

            var multiply   = PipelineOperations.Create("multiply", Multiply, value, two);
            var changeable = PipelineOperations.Create("changeable", changeableOperation, multiply);
            var cache      = changeable.WithCache();
            var suspender  = cache.WithConditionalSuspender(suspension);

            var reaction = PipelineReactions.Create(Reaction, suspender);

            value.SetValue(1);
            value.SetValue(2);
            changeableOperation.SetValue(a => a * 2);

            GC.KeepAlive(reaction);
            Console.ReadLine();
        }