← Voltar

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

Ситуация такая. Версия библиотеки 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 мы проверяем число ошибок, то будем получать всегда предыдущее значение этого числа ошибок.

Este tópico foi útil?

Compartilhar tópico

Comentários (1)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Alexander
Alexander

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