示例#1
0
        public async Task ScheduleMultipleJobs()
        {
            var cronDateTimeServiceMock = new Mock <ICronDateTimeService>();

            cronDateTimeServiceMock.Setup(mock => mock.GetNow()).Returns(new DateTime(2019, 11, 06, 14, 43, 59));
            var scheduler = new Scheduler(new CronParser(cronDateTimeServiceMock.Object), cronDateTimeServiceMock.Object, null);

            var actionObject = new ActionObject();

            scheduler.ScheduleTask("* * * * * *", (cancellationToken) => {
                actionObject.DoWork();
            });

            var actionObject2 = new ActionObject();

            scheduler.ScheduleTask("* * * * *", (cancellationToken) => {
                actionObject2.DoWork();
            });

            var actionObject3 = new ActionObject();

            scheduler.ScheduleTask("* * * * *", async(cancellationToken) => {
                await actionObject3.DoWorkAsync();
            });

            using (var cancellationTokenSource = new CancellationTokenSource(1100))
            {
                await scheduler.RunAsync(cancellationTokenSource.Token);
            }

            Assert.True(actionObject.Modified);
            Assert.True(actionObject2.Modified);
            Assert.True(actionObject3.Modified);
        }
示例#2
0
        public async Task ScheduleAsyncJobsAndOneWillFailTheOtherWillStillRunAndLogWillBeCreated()
        {
            var cronDateTimeServiceMock = new Mock <ICronDateTimeService>();

            cronDateTimeServiceMock.Setup(mock => mock.GetNow()).Returns(new DateTime(2019, 11, 06, 14, 43, 59));
            var logger = new Mock <ILogger <Scheduler> >();

            var scheduler = new Scheduler(new CronParser(cronDateTimeServiceMock.Object), cronDateTimeServiceMock.Object, logger.Object);

            var actionObject = new ActionObject();

            scheduler.ScheduleTask("* * * * * *", async(cancellationToken) => {
                await actionObject.DoWorkAsync();
            });

            scheduler.ScheduleTask("* * * * * *", (cancellationToken) => {
                throw new Exception("Fail!!");
            });

            using (var cancellationTokenSource = new CancellationTokenSource(1100))
            {
                await scheduler.RunAsync(cancellationTokenSource.Token);
            }

            Assert.True(actionObject.Modified);
            logger.Verify(x => x.Log(LogLevel.Error,
                                     It.IsAny <EventId>(),
                                     It.Is <It.IsAnyType>((o, t) => string.Equals("Failed to execute action", o.ToString(), StringComparison.InvariantCultureIgnoreCase)),
                                     It.IsAny <Exception>(),
                                     (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Once);
        }