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


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

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

далее...

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

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


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

Теги:


Спасибо:




4 Ответов
Alexander

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


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

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

далее...

Код
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:
Код
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

далее...

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

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


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



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


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

loading
clippy