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();
            }
        }
示例#2
0
        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)));
        }
示例#3
0
文件: Job.cs 项目: clawit/Fan
 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));
     }
 }
示例#4
0
        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());
        }
示例#6
0
        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();
        }
示例#7
0
        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));
        }
示例#8
0
        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);
        }