public void AddOrUpdate(string recurringJobId, Job job, string cronExpression, RecurringJobOptions options) { if (recurringJobId == null) { throw new ArgumentNullException(nameof(recurringJobId)); } if (job == null) { throw new ArgumentNullException(nameof(job)); } if (cronExpression == null) { throw new ArgumentNullException(nameof(cronExpression)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } using (var connection = _storage.GetConnection()) using (connection.AcquireDistributedRecurringJobLock(recurringJobId, DefaultTimeout)) { var recurringJob = connection.GetOrCreateRecurringJob(recurringJobId, _timeZoneResolver, _nowFactory()); recurringJob.Job = job; recurringJob.Cron = cronExpression; recurringJob.TimeZone = options.TimeZone; recurringJob.Queue = options.QueueName; if (recurringJob.IsChanged(out var changedFields, out var nextExecution)) { using (var transaction = connection.CreateWriteTransaction()) { transaction.UpdateRecurringJob(recurringJobId, changedFields, nextExecution); transaction.Commit(); } } } }
public void AddOrUpdate(string recurringJobId, Job job, string cronExpression, RecurringJobOptions options) { if (recurringJobId == null) { throw new ArgumentNullException(nameof(recurringJobId)); } if (job == null) { throw new ArgumentNullException(nameof(job)); } if (cronExpression == null) { throw new ArgumentNullException(nameof(cronExpression)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } ValidateCronExpression(cronExpression); using (var connection = _storage.GetConnection()) { var recurringJob = new Dictionary <string, string>(); var invocationData = InvocationData.Serialize(job); recurringJob["Job"] = JobHelper.ToJson(invocationData); recurringJob["Cron"] = cronExpression; recurringJob["TimeZoneId"] = options.TimeZone.Id; recurringJob["Queue"] = options.QueueName; var existingJob = connection.GetAllEntriesFromHash($"recurring-job:{recurringJobId}"); if (existingJob == null) { recurringJob["CreatedAt"] = JobHelper.SerializeDateTime(DateTime.UtcNow); } using (var transaction = connection.CreateWriteTransaction()) { transaction.SetRangeInHash( $"recurring-job:{recurringJobId}", recurringJob); transaction.AddToSet("recurring-jobs", recurringJobId); transaction.Commit(); } } }