public void ChangePeriod_PeriodIncreasedTimerNotStarted_PeriodChangedBeforeFirstCall()
        {
            var invoked = new AutoResetEvent(false);
            var entity  = new Entity {
                Id = "entity0"
            };
            var    period            = TimeSpan.FromMilliseconds(250);
            var    timeout           = TimeSpan.FromSeconds(2);
            var    clock             = new UptimeClock();
            Entity lastInvokedEntity = null;

            using var scheduler = new EntityActionScheduler <Entity>(e =>
            {
                lastInvokedEntity = e;
                invoked.Set();
                return(Task.CompletedTask);
            }, autoStart: false, runOnce: false, new TimerFactory());

            scheduler.ScheduleEntity(entity, period);

            var newPeriod = TimeSpan.FromMilliseconds(500);

            scheduler.ChangePeriod(entity, newPeriod);

            scheduler.Start();

            var before = clock.TickCount;

            Assert.True(invoked.WaitOne(timeout));

            var elapsed = TimeSpan.FromMilliseconds(clock.TickCount - before);

            Assert.True(elapsed >= newPeriod);
            Assert.Same(entity, lastInvokedEntity);
        }
示例#2
0
        public void ChangePeriod_TimerStartedPeriodChangedAfterFirstCall_PeriodChangedBeforeNextCall()
        {
            var entity = new Entity {
                Id = "entity0"
            };
            Entity lastInvokedEntity = null;
            var    timerFactory      = new TestTimerFactory();

            using var scheduler = new EntityActionScheduler <Entity>(e =>
            {
                lastInvokedEntity = e;
                return(Task.CompletedTask);
            }, autoStart: true, runOnce: false, timerFactory);

            scheduler.ScheduleEntity(entity, TimeSpan.FromMilliseconds(Period0));
            timerFactory.VerifyTimer(0, Period0);

            timerFactory.FireTimer(0);

            var newPeriod = TimeSpan.FromMilliseconds(Period1);

            scheduler.ChangePeriod(entity, newPeriod);

            timerFactory.VerifyTimer(0, Period1);
            Assert.Same(entity, lastInvokedEntity);
        }