← Zurück

События в стратегии

Добрый день! Решил разобраться с событийной моделью и заткнулся на первой же проблеме. Если происходит ошибка при работе стратегии как узнать какая?

Делаю своего наследника:

public class RobotStrategy : Strategy

далее...

protected override void OnRunning()
{
// подписываемся на события
this.When(this.Error())
.Do(OnSysError)
.MakePeriodical();
...
}

void OnSysError()
{
   // какая ошибка???
}

Нигде в документации ничего не написано как обрабатывать ошибки. Примера тоже нет.

War dieses Thema hilfreich?

Thema teilen

Kommentare (4)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander

romanick: Добрый день! Решил разобраться с событийной моделью и заткнулся на первой же проблеме. Если происходит ошибка при работе стратегии как узнать какая?

Делаю своего наследника:

public class RobotStrategy : Strategy

> далее...
> 
> ```csharp
protected override void OnRunning()
{
// подписываемся на события
this.When(this.Error())
.Do(OnSysError)
.MakePeriodical();
...
}

void OnSysError()
{
   // какая ошибка???
}

Нигде в документации ничего не написано как обрабатывать ошибки. Примера тоже нет.

Это сообщение вы до этого вывели в лог. Данное правило срабатывает когда состояние переходит в StrategyErrorStates.Error. А это происходит если вызван метод AddErrorLog или AddLog(StrategyErrorStates.Error, ...)

esper
esper

Немного изменим вопрос:


protected void Process()
{
	//тут создаем BatchStrategy

	this
		.When(batch.Stopped())
		.Do(BatchStopped);

	base.ChildStrategies.Add(batch);
}

private void BatchStopped()
{
	//как тут узнать какая стратегия завершилась?
}
Alexander
Alexander

esper: Немного изменим вопрос:

protected void Process() { //тут создаем BatchStrategy

this
	.When(batch.Stopped())
	.Do(BatchStopped);

base.ChildStrategies.Add(batch);

}

private void BatchStopped() { //как тут узнать какая стратегия завершилась? }



Остановка BatchStrategy:
```csharp
this
        .When(batch.Stopped())
        .Do<BatchStrategy>(BatchStopped);

private void BatchStopped(BatchStrategy str)

Начиная с версии 3.2.2 это работает.

Если необходимо узнать про то какая конкретно стратегия из BatchStrategy вызвала остановку - добавили feature request.

Alexander
Alexander

romanick: Добрый день! Решил разобраться с событийной моделью и заткнулся на первой же проблеме. Если происходит ошибка при работе стратегии как узнать какая?

Делаю своего наследника:

public class RobotStrategy : Strategy

> далее...
> 
> ```csharp
protected override void OnRunning()
{
// подписываемся на события
this.When(this.Error())
.Do(OnSysError)
.MakePeriodical();
...
}

void OnSysError()
{
   // какая ошибка???
}

Нигде в документации ничего не написано как обрабатывать ошибки. Примера тоже нет.

this.Error отслеживает состояние свойства. Проще просто переопределить OnError.