コード例 #1
0
        public async Task RemovesScheduledTasksAsync()
        {
            var timeService       = new TimeService(TimeSpan.FromMinutes(1));
            var schedulingService = new SchedulingService(timeService);

            var scheduledTask1 = new ScheduledTask
            {
                Name  = "task 1",
                Start = timeService.CurrentDateTime.AddHours(5)
            };

            schedulingService.AddScheduledTask(scheduledTask1);

            var scheduledTask2 = new ScheduledTask
            {
                Name   = "task 2",
                Start  = timeService.CurrentDateTime,
                Action = async() =>
                {
                    await TaskShim.Delay(TimeSpan.FromMinutes(1));
                }
            };

            schedulingService.AddScheduledTask(scheduledTask2);

            Assert.AreEqual(2, schedulingService.GetScheduledTasks().Count);

            schedulingService.RemoveScheduledTask(scheduledTask2);

            Assert.AreEqual(1, schedulingService.GetScheduledTasks().Count);
        }
コード例 #2
0
        public async Task RespectsReschedulingAfterExecutionCompletedIsTrueAsync()
        {
            // Note: this is a real-time service! Don't wait for minutes here, otherwise unit tests will take too long ;-)
            var timeService               = new TimeService(TimeSpan.FromSeconds(1));
            var schedulingService         = new SchedulingService(timeService);
            var hasReceivedCompletedEvent = false;

            var scheduledTask1 = new ScheduledTask
            {
                Name      = "task 1",
                Start     = timeService.CurrentDateTime.AddMinutes(1),
                Recurring = TimeSpan.FromHours(1),
                ScheduleRecurringTaskAfterTaskExecutionHasCompleted = true,
                Action = async() => { await Task.Delay(1000); }
            };

            schedulingService.TaskStarted += (sender, e) =>
            {
                // Task must be *not* here
                var newlyScheduledTask = schedulingService.GetScheduledTasks().FirstOrDefault();

                Assert.IsNull(newlyScheduledTask);
            };

            schedulingService.TaskCompleted += (sender, e) =>
            {
                // Task must be here
                var newlyScheduledTask = schedulingService.GetScheduledTasks().FirstOrDefault();

                Assert.IsNotNull(newlyScheduledTask);

                hasReceivedCompletedEvent = true;
            };

            schedulingService.AddScheduledTask(scheduledTask1);

            schedulingService.Start();

            await Task.Delay(10 * 1000);

            schedulingService.Stop();

            Assert.IsTrue(hasReceivedCompletedEvent);
        }