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)); }
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(); }