private async Task SendScheduledEmailBackgroundAsync(DateTime startDate, string email, int userId) { var oneDayBeforeEmail = startDate.AddDays(ONE_DAY_BEFORE_COURSE_START * -1); var oneWeekBeforeEmail = startDate.AddDays(ONE_WEEK_BEFORE_COURSE_START * -1); var oneMonthBeforeEmail = startDate.AddDays(ONE_MONTH_BEFORE_COURSE_START * -1); var days = startDate - DateTime.UtcNow; List <ScheduledJobModel> jobModelList = new List <ScheduledJobModel>(); if (days.Days >= 30) { var key = _backgroundJob.Schedule <IMailService>(mailService => mailService .SendScheduledEmail(email, $"test scheduled in {ONE_MONTH_BEFORE_COURSE_START} day(-s)"), new DateTimeOffset(oneMonthBeforeEmail)); jobModelList.Add(new ScheduledJobModel { Key = key }); } if (days.Days >= 14) { var key = _backgroundJob.Schedule <IMailService>(mailService => mailService .SendScheduledEmail(email, $"test scheduled in {ONE_WEEK_BEFORE_COURSE_START} day(-s)"), new DateTimeOffset(oneWeekBeforeEmail)); jobModelList.Add(new ScheduledJobModel { Key = key }); } if (days.Days >= 1) { oneDayBeforeEmail = new DateTime(oneDayBeforeEmail.Year, oneDayBeforeEmail.Month, oneDayBeforeEmail.Day, HOUR_TO_SEND_EMAIL, 0, 0); var key = _backgroundJob.Schedule <IMailService>(mailService => mailService .SendScheduledEmail(email, $"test scheduled in {ONE_DAY_BEFORE_COURSE_START} day(-s)"), new DateTimeOffset(oneDayBeforeEmail)); _backgroundJob.Enqueue <IMailService>(mailService => mailService .SendScheduledEmail(email, $"test scheduled in {days.Days} day(-s)")); jobModelList.Add(new ScheduledJobModel { Key = key }); } if (jobModelList.Count > 0) { for (int i = 0; i < jobModelList.Count; i++) { _context.ScheduledJobs.Add(new ScheduledJob { Id = jobModelList[i].Key, UserId = userId }); } await _context.SaveChangesAsync(); } }
private static Task Producer( ILoggerFactory loggerFactory, JobStorage storage, CancellationToken token) { var logger = loggerFactory.CreateLogger("main"); var counter = 0; var client = new BackgroundJobClient(storage); void Create() { while (!token.IsCancellationRequested) { var i = Interlocked.Increment(ref counter); try { client.Schedule(() => HandleJob(i), DateTimeOffset.UtcNow); Ticks.OnNext(Unit.Default); } catch (Exception e) { logger.LogError(e, "Scheduling failed"); } } } return(Task.WhenAll( Task.Run(Create, token), Task.Run(Create, token), Task.Run(Create, token), Task.Run(Create, token))); }
public static string Schedule(Expression <Action> method, TimeSpan delay) { if (_storage == null || _client == null) { throw new Exception("Init has not been called yet."); } else { return(_client.Schedule(method, delay)); } }
public static void AtomTest4() { var client = new BackgroundJobClient(JobStorage.Current); var atomId = client.Schedule("atom-4", TimeSpan.FromSeconds(3), builder => { for (var i = 0; i < 50; i++) { builder.Enqueue(() => Done()); var job2 = builder.Enqueue(() => Wait(1000)); var job3 = builder.ContinueJobWith(job2, () => Wait(500)); } }); client.ContinueJobWith(atomId, () => Done()); }
public static void AtomTest9() { var client = new BackgroundJobClient(JobStorage.Current); var atomId = client.Schedule("Atom test-9", TimeSpan.FromSeconds(3), builder => { for (var i = 0; i < 50; i++) { builder.Enqueue <AtomTask>(task => task.Done()); var job2 = builder.Enqueue(() => Wait(1000), new EnqueuedState("queue2")); var job3 = builder.ContinueJobWith <AtomTask>(job2, task => task.Wait(500), new EnqueuedState("queue2")); } }); client.ContinueJobWith(atomId, () => Done()); }
static void test() { //Hangfire.GlobalConfiguration.Configuration.UseStorage(); IBackgroundJobClient client = new BackgroundJobClient(); var jobid = client.Enqueue(() => Console.WriteLine(string.Empty)); jobid = client.Schedule(() => Console.WriteLine(string.Empty), TimeSpan.FromHours(10)); //client.Create() var server = new BackgroundJobServer(new BackgroundJobServerOptions() { }); //server.Start(); //server.Stop(); server.Dispose(); }
public static string Schedule(this IMediator mediator, string jobName, IRequest <Unit> request, DateTime startTime) { var client = new BackgroundJobClient(); return(client.Schedule <MediatorHangfireBridge>(bridge => bridge.Send(jobName, request), startTime)); }
private void Schedule(IBackgroundJob request, TimeSpan timeSpan) { var client = new BackgroundJobClient(); client.Schedule <MediatorHangfireBridge>(bus => bus.Enqueue(request), timeSpan); }
public static void Schedule(this IMediator mediator, IRequest request, TimeSpan timeSpan) { var client = new BackgroundJobClient(); client.Schedule <MediatorHangFireMessageBridge>(bridge => bridge.Send(request), timeSpan); }
public static void Schedule(this IMediator mediator, INotification notification, TimeSpan timeSpan) { var client = new BackgroundJobClient(); client.Schedule <MediatorHangFireMessageBridge>(bridge => bridge.Publish(notification), timeSpan); }