获取IQuartzScheduleJobManager中的后台作业列表

问题描述 投票:0回答:1

我们在PostInitialize的方法WebModule中安排后台工作,如下所示:

IocManager.Resolve<IQuartzScheduleJobManager>().ScheduleAsync<WorkFlowDetailNotificationWorker>(job =>
{
    job.WithIdentity("SendNotificationForRemainGardeshKarDetail", "AutoNotification")
       .WithDescription("WorkFlowsNotification");
}, trigger =>
{
    trigger.StartNow().WithSchedule(CronScheduleBuilder.CronSchedule("0 0/60 8-19 * * ?")).Build();
});

我们如何在Application Service中获取已注册的后台作业列表,以便我们可以操作它们的属性?

我们的项目启动模板是ASP.NET Boilerplate,AngularJS和EntityFramework。

c# quartz-scheduler aspnetboilerplate
1个回答
0
投票

您可以在Asp.Net Boilerplate框架中获取注册到Quartz的所有作业的列表,如下所示;

    public class MySampleAppService
    {
            private readonly IAbpQuartzConfiguration _abpQuartzConfiguration;

            public MySampleAppService(IAbpQuartzConfiguration abpQuartzConfiguration)
            {
               _abpQuartzConfiguration = abpQuartzConfiguration
            }

            private void ListAllJobs()
            {
                var scheduler = _abpQuartzConfiguration.Scheduler;
                var jobGroups = scheduler.GetJobGroupNames();
                foreach (string group in jobGroups)
                {
                    var groupMatcher = GroupMatcher<JobKey>.GroupContains(group);
                    var jobKeys = scheduler.GetJobKeys(groupMatcher);
                    foreach (var jobKey in jobKeys)
                    {
                        var detail = scheduler.GetJobDetail(jobKey);
                        var triggers = scheduler.GetTriggersOfJob(jobKey);
                        foreach (ITrigger trigger in triggers)
                        {
                            Console.WriteLine(group);
                            Console.WriteLine(jobKey.Name);
                            Console.WriteLine(detail.Description);
                            Console.WriteLine(trigger.Key.Name);
                            Console.WriteLine(trigger.Key.Group);
                            Console.WriteLine(trigger.GetType().Name);
                            Console.WriteLine(scheduler.GetTriggerState(trigger.Key));

                            var nextFireTime = trigger.GetNextFireTimeUtc();
                            if (nextFireTime.HasValue)
                            {
                                Console.WriteLine(nextFireTime.Value.LocalDateTime.ToString(CultureInfo.InvariantCulture));
                            }

                            var previousFireTime = trigger.GetPreviousFireTimeUtc();
                            if (previousFireTime.HasValue)
                            {
                                Console.WriteLine(previousFireTime.Value.LocalDateTime.ToString(CultureInfo.InvariantCulture));
                            }
                        }
                    }
                }
            }

      //...
}
© www.soinside.com 2019 - 2024. All rights reserved.