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


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


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

Делаю своего наследника:
Code
public class RobotStrategy : Strategy

далее...

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

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


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

Tags:


Thanks:


Alexander

Avatar
Date: 7/1/2011
Reply


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

Делаю своего наследника:
Code
public class RobotStrategy : Strategy

далее...

Code
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


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

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 Go to
Немного изменим вопрос:
Code

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

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

	base.ChildStrategies.Add(batch);
}

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



Остановка BatchStrategy:
Code
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 Go to
Добрый день!
Решил разобраться с событийной моделью и заткнулся на первой же проблеме.
Если происходит ошибка при работе стратегии как узнать какая?

Делаю своего наследника:
Code
public class RobotStrategy : Strategy

далее...

Code
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