← Back

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

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

Наткнулся на небольшую проблему. Есть стратегия, производная от 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() главной стратегии отработает до конца. Это ошибка или по дизайну так задумано? Как можно эту ситуацию обойти?

Comments (1)

Login or Create account, Log in or register to leave a comment

Mikhail Sukhov
Mikhail Sukhov

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

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