private void RecomputeDerivedValue() { var runningDerivation = new RunningDerivation(_dependencies); RunningDerivation oldTopOfStack = RunningDerivationsStack.Top; RunningDerivationsStack.Top = runningDerivation; _value = _expressionFunction.Invoke(); if (runningDerivation.DependenciesChanged) { _dependencies = runningDerivation.UpdateExpressionDependencies(_dependencies, this); } RunningDerivationsStack.Top = oldTopOfStack; }
private void Run() { var runningDerivation = new RunningDerivation(_dependencies); RunningDerivation oldTopOfStack = RunningDerivationsStack.Top; RunningDerivationsStack.Top = runningDerivation; _action.Invoke(); if (runningDerivation.DependenciesChanged) { _dependencies = runningDerivation.UpdateReactionDependencies(_dependencies, Run); } RunningDerivationsStack.Top = oldTopOfStack; }