protected override void HandleReadyComputation(Computation computation)
            {
                var syncComputation = (SynchronizationComputation <TLeft, TRight>)computation;
                var left            = syncComputation.Input;
                var right           = syncComputation.Opposite.Input;

                switch (syncComputation.SynchronizationContext.ChangePropagation)
                {
                case ChangePropagationMode.None:
                    if (guard.Evaluate(left, right))
                    {
                        parent.CreateLeftToRightSynchronization(syncComputation);
                    }
                    break;

                case ChangePropagationMode.OneWay:
                case ChangePropagationMode.TwoWay:
                    var tracker = guard.Observe(left, right);
                    tracker.Successors.SetDummy();
                    syncComputation.Dependencies.Add(new GuardedSynchronization <TLeft, TRight>(syncComputation, parent.CreateLeftToRightSynchronization, tracker));
                    break;

                default:
                    break;
                }
            }
 protected override void HandleReadyComputation(Computation computation)
 {
     parent.CreateLeftToRightSynchronization(false, (SynchronizationComputation <TLeft, TRight>)computation);
 }