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

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

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

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