Правило которое проверяет условие с определенным онтервалом


Правило которое проверяет условие с определенным онтервалом
Atom
6/21/2012


В прошлых версиях было так:
.When(() => a == b, TimeSpan.FromSeconds(1)).Do...
Как теперь создать такое же правило?

Tags:


Thanks:


Moadip

Avatar
Date: 6/21/2012
Reply


Никак. Писать свое правило.

Вот как пример класса, с нужным правилом.
Code

    internal static class Rules
    {
        public static StrategyRule<ITrader> WhenTimeToCheck(this Strategy strategy, Func<bool> condition, TimeSpan interval)
        {
            if (strategy == null)
            {
                throw new ArgumentNullException("strategy");
            }
            return new TimeToCheckRule(strategy.Trader, condition, interval);
        }

        private sealed class TimeToCheckRule : StrategyRule<ITrader>
        {
            private readonly MarketTimer _marketTimer;
            private readonly ITrader _trader;
            private readonly Func<bool> _condition;
            private readonly TimeSpan _interval;

            public TimeToCheckRule(ITrader trader, Func<bool> condition, TimeSpan interval)
            {
                if (trader == null) throw new ArgumentNullException("trader");
                if (condition == null) throw new ArgumentNullException("condition");

                _trader = trader;
                _condition = condition;
                _interval = interval;

                Name = "Интервал условие " + interval;

                _marketTimer = new MarketTimer(_trader, Activator).Interval(interval).Start();
            }

            private void Activator(MarketTimer marketTimer, bool flag)
            {
                if (flag)
                {
                    marketTimer.FirstTime(_trader.MarketTime + _interval);
                }
                else if (_condition.Invoke())
                {
                    Activate(_trader);
                }
            }

            protected override void DisposeManaged()
            {
                _marketTimer.Dispose();
                base.DisposeManaged();
            }
        }
    }
Thanks: InsiderHSE

Alexander

Avatar
Date: 6/21/2012
Reply


Как это никак? А WhenIntervalElapsed чем не устраивает? :)
Thanks:

InsiderHSE

Avatar
Date: 6/21/2012
Reply


Alexander Mukhanchikov Go to
Как это никак? А WhenIntervalElapsed чем не устраивает? :)

Оно активируется по истечении определенных промежутков времени и вызывает Do. А нужно, чтобы Do вызывался только если условие верно...
Thanks:

Alexander

Avatar
Date: 6/21/2012
Reply


Да, тогда сори. Верно, надо свой правило писать.
Thanks:

Кот Матроскин

Avatar
Date: 6/21/2012
Reply


InsiderHSE Go to
Alexander Mukhanchikov Go to
Как это никак? А WhenIntervalElapsed чем не устраивает? :)

Оно активируется по истечении определенных промежутков времени и вызывает Do. А нужно, чтобы Do вызывался только если условие верно...

А если прямо в Do влепить проверку на это условие?
Code
if(условие)
{
   действия
}
Thanks:

InsiderHSE

Avatar
Date: 6/21/2012
Reply


Кот Матроскин Go to
InsiderHSE Go to
Alexander Mukhanchikov Go to
Как это никак? А WhenIntervalElapsed чем не устраивает? :)

Оно активируется по истечении определенных промежутков времени и вызывает Do. А нужно, чтобы Do вызывался только если условие верно...

А если прямо в Do влепить проверку на это условие?
Code
if(условие)
{
   действия
}

Так тоже можно, но менее читабельно =)
Thanks:

Кот Матроскин

Avatar
Date: 6/21/2012
Reply


InsiderHSE Go to
Так тоже можно, но менее читабельно =)

Зато правило на 50 строчек писать не нужно)))
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy