Причины остановки стратеги
Atom
17.04.2012


Вопрос в следующем. Есть стратегия, у нее две дочерние. В стратегии я в коде добавляю 2 правила по одному на дочернюю стратегию.

Во первых в Rules потом вдруг появляются еще 2 правила итого становится 4 после запуска дочерних стратегий.
Во вторых когда активировалась первая стратегия, я останавливаю вторую, тут же начинает останавливаться и базовая стратегия не дождавшись даже окончания завершения дочерней которая активировалась. При этом в OnStopping методе базовой стратегии я вижу 4 правила в Rules в момент остановки, то есть правил не нулевое количество.
Если не останавливать вторую стратегию насильно, тогда первая дочерняя завершается и базовая останавливается.

Каковы полные причины остановки стратегии? В каком случае она переходит в Stopping состояние? Кто знает? Я не могу до конца допереть в каком случае стратегия начинает останавливаться.

Теги:


Спасибо:


Mikhail Sukhov

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


Какой-нибудь пример нужен.
Спасибо:

ra81

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


Mikhail Sukhov Перейти
Какой-нибудь пример нужен.

прикрепил. Релиз 4.0.22

Там правило на активацию дочерних стратегий. Когда стратегия дочерняя активируется, она начинает работу. Если не испольозвать следующий метод, тогда все боле меня работает, Но логика не та что нужна.

Код
        private void StopNotActiveChilds()
        {
            var firstActivated = FirstActivated as Strategy;
            var stoppingStrategies = ChildStrategies.Where(s => s != firstActivated).ToArray();
            Debug.WriteLine("Нужно остановить {0} дочерних".Put(stoppingStrategies.Count()));
            stoppingStrategies.ForEach(s => Stop());
        }


Почему-то как только одна из дочерних стратегий активируется, и я в этом методе останавливаю другую стратегию, у меня базовая тоже начинает стопаться.
Спасибо:

ra81

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


Блин кривой мой глаз дырявая башка, я часа 3 извращался с этим вопросом вчера и часа два сегодня. Ларчик открывался капец просто.

Код
stoppingStrategies.ForEach(s => Stop());


я тут не стопаю дочерние, я тут стопаю базовую. Я идиото, кретино и прочее. Всем спасибо. Зато неплохо разобрался в вопросе :)). Как всегда. Надо было делать вот так:

Код
stoppingStrategies.ForEach(s => s.Stop());
Спасибо:

OvcharenkoVI

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


ra81 Перейти
Блин кривой мой глаз дырявая башка, я часа 3 извращался с этим вопросом вчера и часа два сегодня. Ларчик открывался капец просто.

Код
stoppingStrategies.ForEach(s => Stop());


я тут не стопаю дочерние, я тут стопаю базовую. Я идиото, кретино и прочее. Всем спасибо. Зато неплохо разобрался в вопросе :)). Как всегда. Надо было делать вот так:

Код
stoppingStrategies.ForEach(s => s.Stop());


Бывает =))))))
Спасибо:

Serg

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


ra81 Перейти
...

Спасибо за вложение. Переосмысливаю написание стратегий)
Спасибо:


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

loading
clippy