Некорректная отработка ошибок в стратегиях.
Ситуация такая.
Версия библиотеки 4.0.22.
Есть стратегия родительская, есть дочерняя. Если в дочерней происходят ошибки, то она вызывает следующий код.
Code
private void FatalFinish(string message)
{
OnError(new Exception(message));
Stop();
}
В родительской стратегии в случае ошибки, дочерняя сразу же принудительно завершается через код.
В дочерней стратегии есть следующий код.
Code
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 мы проверяем число ошибок, то будем получать всегда предыдущее значение этого числа ошибок.