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


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

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

public class RobotStrategy : Strategy

далее...

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

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

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


Теги:


Спасибо:


Alexander

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


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

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


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


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

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

	base.ChildStrategies.Add(batch);
}

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

Alexander

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


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

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


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

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

public class RobotStrategy : Strategy

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

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

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

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

Спасибо:


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

loading
clippy