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

Причины остановки стратеги
Atom
4/17/2012
ra81


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

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

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

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 4/17/2012
Reply


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

ra81

Avatar
Date: 4/17/2012
Reply


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

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

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

Code
        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());
        }


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

ra81

Avatar
Date: 4/18/2012
Reply


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

Code
stoppingStrategies.ForEach(s => Stop());


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

Code
stoppingStrategies.ForEach(s => s.Stop());
Thanks:

OvcharenkoVI

Avatar
Date: 4/18/2012
Reply


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

Code
stoppingStrategies.ForEach(s => Stop());


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

Code
stoppingStrategies.ForEach(s => s.Stop());


Бывает =))))))
Thanks:

Serg

Avatar
Date: 4/18/2012
Reply


ra81
...

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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy