Beispiel #1
0
 public AspNetJobWrapper(string pattern, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling)
 {
     Pattern         = pattern;
     Type            = null;
     Handler         = handler;
     OverlapHandling = overlapHandling;
 }
        public static Guid Schedule(this IJobScheduler scheduler, Action handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            return(scheduler.Schedule((context) =>
            {
                handler();

                return Task.FromResult(0);
            }, overlapHandling));
        }
Beispiel #3
0
        public ScheduledJob(string pattern, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling)
        {
            if (string.IsNullOrWhiteSpace(pattern))
            {
                throw new ArgumentException("No pattern was specified.", nameof(pattern));
            }

            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler), "No handler was specified.");
            }

            if (pattern == "@immediately")
            {
                _cron = null;
                _next = DateTime.UtcNow;
            }
            else if (pattern.StartsWith("@once "))
            {
                var value = pattern.Remove(0, 6);

                _cron = null;
                _next = DateTime.Parse(value);
            }
            else
            {
                _cron = CronExpression.Parse(pattern, CronFormat.IncludeSeconds);
                _next = _cron.GetNextOccurrence(DateTime.UtcNow);
            }

            Id              = Guid.NewGuid();
            Pattern         = pattern;
            Type            = null;
            Handler         = handler;
            IsImmediately   = (pattern == "@immediately");
            IsOnce          = pattern.StartsWith("@once ");
            IsAnonymous     = true;
            OverlapHandling = overlapHandling;
        }
Beispiel #4
0
 public OverlapAttribute(OverlapHandling handling)
 {
     Handling = handling;
 }
Beispiel #5
0
        public static IServiceCollection AddTempusJob(this IServiceCollection services, Action <JobExecutionContext> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            Func <JobExecutionContext, Task> funcHandler = (context) =>
            {
                handler(context);

                return(Task.CompletedTask);
            };

            return(AddTempusJob(services, funcHandler, overlapHandling));
        }
Beispiel #6
0
        public static IServiceCollection AddTempusJob(this IServiceCollection services, string pattern, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            services.AddTransient <AspNetJobWrapper>(provider => new AspNetJobWrapper(pattern, handler, overlapHandling));

            return(services);
        }
Beispiel #7
0
        public static IServiceCollection AddTempusJob(this IServiceCollection services, string pattern, Func <Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            Func <JobExecutionContext, Task> funcHandler = (context) => handler();

            return(AddTempusJob(services, pattern, funcHandler, overlapHandling));
        }
Beispiel #8
0
        public static IServiceCollection AddTempusJob(this IServiceCollection services, DateTime when, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            services.AddTransient <AspNetJobWrapper>(provider => new AspNetJobWrapper($"@once {when:O}", handler, overlapHandling));

            return(services);
        }
Beispiel #9
0
        public Guid Schedule(string pattern, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            var job = _jobs.Add(pattern, handler, overlapHandling);

            return(job.Id);
        }
 public static Guid Schedule(this IJobScheduler scheduler, DateTime when, Func <Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
 {
     return(scheduler.Schedule(when, async(context) =>
     {
         await handler();
     }, overlapHandling));
 }
        public static Guid Schedule(this IJobScheduler scheduler, DateTime when, Action <JobExecutionContext> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            return(scheduler.Schedule(when, (context) =>
            {
                handler(context);

                return Task.FromResult(0);
            }, overlapHandling));
        }
 public static Guid Schedule(this IJobScheduler scheduler, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
 {
     return(scheduler.Schedule("@immediately", async(context) =>
     {
         await handler(context);
     }, overlapHandling));
 }
 public static Guid Schedule(this IJobScheduler scheduler, DateTime when, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
 {
     return(scheduler.Schedule($"@once {when:O}", async(context) =>
     {
         await handler(context);
     }, overlapHandling));
 }
Beispiel #14
0
        public IScheduledJob Add(string pattern, Func <JobExecutionContext, Task> handler, OverlapHandling overlapHandling = OverlapHandling.Allow)
        {
            var job = new ScheduledJob(pattern, handler, overlapHandling);

            _locker.EnterWriteLock();

            try
            {
                _jobs.Add(job);
            }
            finally
            {
                _locker.ExitWriteLock();
            }

            return(job);
        }