S#

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


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


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

Теги:


Спасибо:




7 Ответов
Moadip

Фотография
Автор статей Программист
Дата: 21.06.2012
Ответить


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

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

    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();
            }
        }
    }
Спасибо: InsiderHSE

Alexander

Фотография
Дата: 21.06.2012
Ответить


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

InsiderHSE

Фотография
Дата: 21.06.2012
Ответить


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

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

Alexander

Фотография
Дата: 21.06.2012
Ответить


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

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

Фотография
Дата: 21.06.2012
Ответить


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

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

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

InsiderHSE

Фотография
Дата: 21.06.2012
Ответить


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

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

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

Так тоже можно, но менее читабельно =)
Автор топика
Спасибо:

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

Фотография
Дата: 21.06.2012
Ответить


InsiderHSE Перейти
Так тоже можно, но менее читабельно =)

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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy