Akka.Tests.Routing.ResizerSpec.DefaultResizer_must_grow_as_needed_under_pressure C# (CSharp) Метод

DefaultResizer_must_grow_as_needed_under_pressure() приватный Метод

private DefaultResizer_must_grow_as_needed_under_pressure ( ) : void
Результат void
        public void DefaultResizer_must_grow_as_needed_under_pressure()
        {
            var resizer = new DefaultResizer(3, 5, pressureThreshold: 1, rampupRate: 0.1d, backoffRate: 0.0d,
                messagesPerResize: 1, backoffThreshold: 0.0d);

            var router = Sys.ActorOf(Props.Create<PressureActor>().WithRouter(new RoundRobinPool(0, resizer)));

            //first message should create the minimum number of routees
            router.Tell("echo", TestActor);
            ExpectMsg("reply");

            (RouteeSize(router)).ShouldBe(resizer.LowerBound);

            Action<int, TimeSpan, int?> loopTillAppropriateSize = (loops, span, expectedBound) =>
            {
                for (var i = 0; i < loops; i++)
                {
                    router.Tell(span, TestActor);
                    if (expectedBound.HasValue && RouteeSize(router) >= expectedBound.Value)
                    {
                        return;
                    }

                    //sending too quickly will result in skipped resize due to many resizeInProgress conflicts
                    Thread.Sleep(TimeSpan.FromMilliseconds(20));
                }
            };

            // 2 more should go through without triggering more
            loopTillAppropriateSize(2, TimeSpan.FromMilliseconds(200), null);
            RouteeSize(router).ShouldBe(resizer.LowerBound);

            // a whole bunch should max it out
            loopTillAppropriateSize(200, TimeSpan.FromMilliseconds(500), resizer.UpperBound);
            RouteeSize(router).ShouldBe(resizer.UpperBound);
        }