{"id":540,"date":"2016-12-16T13:20:49","date_gmt":"2016-12-16T12:20:49","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=540"},"modified":"2017-09-04T15:25:40","modified_gmt":"2017-09-04T14:25:40","slug":"c-quartz-jobs-scheduled-tasks","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-quartz-jobs-scheduled-tasks\/","title":{"rendered":"C# Quartz Jobs (Scheduled Tasks)"},"content":{"rendered":"<pre lang=\"c#\">using System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing Application.Business.Service;\r\nusing Application.BusinessObjects;\r\nusing log4net;\r\nusing Quartz;\r\nusing Quartz.Impl;\r\n\r\nnamespace Application.WindowsService\r\n{\r\n    public class Dispatcher\r\n    {\r\n        private IScheduler scheduler;\r\n        private readonly ScheduledTaskService scheduledTaskService;        \r\n        private readonly ILog log;\r\n\r\n        public Dispatcher()\r\n        {\r\n            scheduledTaskService = new ScheduledTaskService();\r\n            log = LogManager.GetLogger(typeof(Dispatcher));\r\n        }\r\n\r\n        public async Task InitializeTasksAsync()\r\n        {\r\n            await Task.Run(() =&gt;\r\n            {\r\n                try\r\n                {\r\n                    scheduler = StdSchedulerFactory.GetDefaultScheduler();\r\n                    scheduler.Start();\r\n\r\n                    var assembly = Assembly.GetAssembly(typeof(Dispatcher));\r\n                      \r\n                    \/\/ Test a specific task                  \r\n                    \/\/TriggerTaskNow&lt;ACustomTask();\r\n\r\n                    var windowsserviceTasksScheduletasks = \"Application.WindowsService.Tasks.ScheduleTasks\";\r\n                    var taskType = assembly.GetType(windowsserviceTasksScheduletasks);\r\n\r\n                    if (taskType == null)\r\n                    {\r\n                        var message = string.Format(\"Task {0} with type {1} cannot be resolved.\",\r\n                            windowsserviceTasksScheduletasks, \"ScheduleTasks\");\r\n                        \/\/console.WriteLine(message);\r\n                        log.Error(message);\r\n                    }\r\n                    else\r\n                    {\r\n                        ScheduleJob(taskType);\r\n                    }\r\n\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    log.Error(ex);\r\n                }\r\n            });\r\n        }\r\n\r\n        private void ScheduleJob(Type taskType)\r\n        {\r\n            var job = JobBuilder.Create(taskType).WithIdentity(\"ScheduleTasks\").Build();\r\n\r\n            var trigger = (ICronTrigger)TriggerBuilder.Create().WithCronSchedule(\"0 0\/1 * * * ?\").Build();\r\n\r\n            var dateTimeOffset = scheduler.ScheduleJob(job, trigger);\r\n\r\n            var message = $\"Task {\"ScheduleTasks\"} is scheduled on {dateTimeOffset} and will repeat using this cron expression: {trigger.CronExpressionString}\";\r\n\r\n            \/\/console.WriteLine(message);\r\n            log.Info(message);\r\n        }\r\n\r\n        public static async void TriggerTaskNow() where T : IJob\r\n        {\r\n            await Task.Run(() =&gt;\r\n            {\r\n                var scheduler = StdSchedulerFactory.GetDefaultScheduler();\r\n\r\n                \/\/ Controleren of de taak niet nu al draait\r\n                var jobs = scheduler.GetCurrentlyExecutingJobs();\r\n                foreach (var job in jobs)\r\n                {\r\n                    if (job.JobDetail.JobType == typeof(T))\r\n                    {\r\n                        \/\/ Job is already running\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                var newJob = JobBuilder.Create().Build();\r\n                scheduler.ScheduleJob(newJob, TriggerBuilder.Create().StartNow().Build());\r\n            });\r\n        }\r\n\r\n        public void Stop()\r\n        {\r\n            log.Info(\"Shutdown scheduler.\");\r\n            scheduler.Shutdown(true);\r\n        }\r\n    }\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>using System; using System.Collections.Generic; using System.Reflection; using System.Threading.Tasks; using Application.Business.Service; using Application.BusinessObjects; using log4net; using Quartz; using Quartz.Impl; namespace Application.WindowsService { public class Dispatcher { private IScheduler scheduler; private readonly ScheduledTaskService scheduledTaskService; private readonly ILog log; public Dispatcher() { scheduledTaskService = new ScheduledTaskService(); log = LogManager.GetLogger(typeof(Dispatcher)); } public async Task InitializeTasksAsync() { await Task.Run(() =&gt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-540","post","type-post","status-publish","format-standard","hentry","category-dotnet"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=540"}],"version-history":[{"count":4,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/540\/revisions"}],"predecessor-version":[{"id":860,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/540\/revisions\/860"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}