public IPollingDecoration SetBackgroundAction(ILogicOf <ITask> backgroundAction, double backgroundIntervalMSecs = 30000) { this.ClearBackgroundAction(); backgroundAction.Context = (this as ITask); this.Background = new BackgroundHost(true, backgroundIntervalMSecs, backgroundAction); return(this); }
public ConditionalWaiter(ICondition condition, ICondition stopWaitingCondition = null) : base() { CuttingEdge.Conditions.Condition.Requires(condition).IsNotNull(); this.Condition = condition; this.StopWaitingCondition = stopWaitingCondition; this._background = new BackgroundHost(true, 1000, Logic.New(() => { lock (_stateLock) { if (Condition.Evaluate().GetValueOrDefault()) { this._isResolved = true; Monitor.Pulse(_stateLock); } else if (this.StopWaitingCondition != null && this.StopWaitingCondition.Evaluate().GetValueOrDefault() == true) { this._isResolved = false; Monitor.Pulse(_stateLock); } } })); }