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