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

События в стратегии
Atom
6/30/2011
romanick


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

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

public class RobotStrategy : Strategy

далее...

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

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

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


Tags:


Thanks:


Alexander

Avatar
Date: 7/1/2011
Reply


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, ...)

Thanks:

esper

Avatar
Date: 7/1/2011
Reply


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


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

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

	base.ChildStrategies.Add(batch);
}

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

Alexander

Avatar
Date: 7/3/2011
Reply


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.

Thanks:

Alexander

Avatar
Date: 7/3/2011
Reply


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

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

public class RobotStrategy : Strategy

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

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

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

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

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy