← Voltar

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

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

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

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

Este tópico foi útil?

Compartilhar tópico

Comentários (5)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Mikhail Sukhov
Mikhail Sukhov

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

ra81
ra81 Autor

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

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

Serg
Serg

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

ra81
ra81 Autor

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

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

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

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

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

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

> 
> я тут не стопаю дочерние, я тут стопаю базовую. Я идиото, кретино и прочее. Всем спасибо. Зато неплохо разобрался в вопросе :)). Как всегда. Надо было делать вот так:
> 
> ```csharp
stoppingStrategies.ForEach(s => s.Stop());

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