← Назад

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

Ситуация такая. Версия библиотеки 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
Alexander

Будет фикс в следующей версии 4.1 на codeplex