コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                    }
                }
            }));
        }