[normal] параллельная дочерняя стратегия не параллельна

[normal] параллельная дочерняя стратегия не параллельна
Atom
11.02.2011
Greene-nsk


Очень понравилась идея с дочерними стратегиями и достаточно элегантная реализация. Спасибо, Михаил.

Наткнулся на небольшую проблему. Есть стратегия, производная от TimeFrameStrategy. В ней создаются две зависимые дочерние стратегии, которые помечаются как параллельные:

Код

protected override StrategyProcessResults OnProcess()
{
// для каждого алерта добавляем по пакетной стратегии
strategy_parent = new BatchStrategy(BatchFinishModes.First) { IsParallel = true };

foreach (Alert alert in alerts)
{
var strategy_for_alert = new RegisterAlertToSmartStrategy(alert);
strategy_for_alert.IsParallel = true;
strategy_parent.ChildStrategies.Add(strategy_for_alert);
}

base.ChildStrategies.Add(strategy_parent);
}
-----------------------

class RegisterAlertToSmartStrategy : ActionStrategy
...



Дочерняя стратегия добавляется и запускается - все ОК. Затем на следующей итерации мне необходимо остановить эту дочернюю стратегию:
Код

protected override StrategyProcessResults OnProcess()
{
...
strategy_parent.Stop();
<дожидаемся остановки стратегии>
<дальнейшие действия>
}


Проблема в том, что я не могу дождаться остановки. Она происходит только после того, как OnProcess() главной стратегии отработает до конца. Это ошибка или по дизайну так задумано? Как можно эту ситуацию обойти?

Теги:


Спасибо:


Mikhail Sukhov

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


Greene-nsk

Проблема в том, что я не могу дождаться остановки. Она происходит только после того, как OnProcess() главной стратегии отработает до конца. Это ошибка или по дизайну так задумано? Как можно эту ситуацию обойти?


Например, корневую пакетную стратегию, куда добавляются дочерние, сделать не параллельной.
Спасибо:


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

loading
clippy