Некорректная отработка ошибок в стратегиях.
Atom Ответить
20.05.2012


Ситуация такая. Версия библиотеки 4.0.22.

Есть стратегия родительская, есть дочерняя. Если в дочерней происходят ошибки, то она вызывает следующий код.
Код

        private void FatalFinish(string message)
        {
            OnError(new Exception(message));
            Stop();
        }


В родительской стратегии в случае ошибки, дочерняя сразу же принудительно завершается через код.

Код
ChilsStrategy.Stop();


В дочерней стратегии есть следующий код.

Код
        protected override void OnStopped()
        {
            if (ErrorCount > 0)
                this.AddInfoLog("OnStopped(): Последний регистрируемый ордер Id: {0} TransId {1}.", Order.Id, Order.TransactionId);
            else
                this.AddInfoLog("OnStopped(): Зарегистрированный ордер Id: {0} TransId {1}.", Order.Id, Order.TransactionId);

            base.OnStopped();
        }


В итоге получаем что когда дочерняя стратегия завершена, число ошибок у нее равно НУЛЮ. То есть код выше всегда выполняется будто ошибок не было.

Я полагаю что это происходит из-за того что в классе Strategy, сначала генерится событие об ошибке в стратегии, а только потом увеличивается счетчик ошибок. Что некорректно. Если стратегия сгенерила ошибку, и в хендлере события Error мы проверяем число ошибок, то будем получать всегда предыдущее значение этого числа ошибок.

Теги:


Спасибо:




1 Ответов
Alexander

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


Будет фикс в следующей версии 4.1 на codeplex
Спасибо:


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

loading
clippy