Как да работя с Quartz.Net в C #

Когато работите по приложения, често ще трябва да изпълнявате определени задачи във фонов режим за предварително определени интервали от време. Планирането на задания в приложения е предизвикателство и можете да избирате от много налични рамки, като Quartz, Hangfire и др.

Quartz.Net се използва отдавна и осигурява по-добра поддръжка за работа с изрази Cron. Hangfire е поредната рамка за планиране на работа, която се възползва от тръбопровода за обработка на заявки на ASP.Net за обработка и изпълнение на задачи.

Quartz.Net е .Net порт на популярната рамка за планиране на работа на Java. Това е система за планиране на работа с отворен код, която може да се използва от най-малките приложения до мащабните корпоративни системи. Официалният уебсайт на Quartz.Net гласи: „Quartz.Net е пълнофункционална система за планиране на задания с отворен код, която може да се използва от най-малките приложения до големите корпоративни системи.“

Приготвяме се да започнем

Можете да инсталирате Quartz.Net от раздела за изтегляне на официалния сайт на Quartz. Можете също да инсталирате Quartz.Net през прозореца на Package Manager във вашата Visual Studio IDE.

Трите основни компонента в Quartz са работни места, задействания и планиращи програми, т.е. за да създавате и планирате работни места в Quartz.Net, ще трябва да имате планиращи устройства, задействания и работни места. Докато заданието обозначава задачата, която трябва да бъде изпълнена, се използва спусък, за да се определи как ще се изпълни заданието. Планировщикът е компонентът, който планира заданията. Обърнете внимание, че трябва да регистрирате вашите работни места и задействания с планировчика.

Програмиране на Quartz.Net в C #

За да създадете работа, трябва да създадете клас, който реализира интерфейса IJob. Между другото, този интерфейс декларира метода Execute - трябва да внедрите този метод в своя персонализиран клас на работа. Следният кодов фрагмент илюстрира как можете да внедрите интерфейса на IJob за проектиране на персонализиран клас на работа с помощта на библиотеката Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Ето една проста реализация на метода Execute на класа Job - оставям на вас да създадете своя персонализиран клас на работа, който да отговаря на нуждите на вашето приложение. Даденият по-долу кодов фрагмент записва текущата стойност на DateTime като текст във файл. Имайте предвид, че това изпълнение не е безопасно за нишки; това е само с илюстративна цел.

public void Execute(IJobExecutionContext context)

        {

            using (StreamWriter streamWriter = new StreamWriter(@"D:\Log.txt", true))

            {

                streamWriter.WriteLine(DateTime.Now.ToString());

            }

        }

След като вече сте дефинирали класа на заданието, ще трябва да създадете свой собствен клас за планиране на работа и да дефинирате задействането за вашата работа. Спусъкът ще съдържа метаданните на заданието като cron израз. Можете да посетите тази връзка, за да генерирате cron изрази.

Сега, как е така, че работните места са насрочени? Е, има компонент, наречен програма за планиране на работа, който е отговорен за планирането на вашите работни места. По същество можете да се възползвате от планиращите задачи, за да планирате вашите задачи за изпълнение. Следващият списък с кодове илюстрира как можем да дефинираме задействане за нашата работа и след това да регистрираме заданието и задействането с планиращото задание.

public class JobScheduler

   {

       public static void Start()

       {

           IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

           scheduler.Start();

           IJobDetail job = JobBuilder.Create().Build();

           ITrigger trigger = TriggerBuilder.Create()

               .WithIdentity("Job", "")

               .WithCronSchedule("0 0/1 * 1/1 * ? *")

               .StartAt(DateTime.UtcNow)

               .WithPriority(1)

               .Build();

              scheduler.ScheduleJob(job, trigger);

       }

   }

Вижте списъка с кодове, даден по-горе. Обърнете внимание как са посочени името и групата на задействането при създаване на екземпляр на задействането. След като задействането на заданието е дефинирано и конфигурирано с помощта на необходимия cron израз, задействането се регистрира в планиращото задание.

Можете също така да изградите спусък, който се задейства всяка секунда и го повтаря за неопределено време. Ето кодов фрагмент, който илюстрира как можете да изградите тригер като този.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Не винаги се нуждаете от услуга на Windows, за да стартирате вашия планировчик. Ако използвате уеб приложение ASP.Net, можете да се възползвате от събитието Application_Start на файла Global.asax и след това да се обадите на метода JobScheduler.Start (), както е показано в кодовия фрагмент по-долу.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Имайте предвид, че JobScheduler е името на персонализирания клас, който създадохме по-рано. Имайте предвид, че можете също да използвате Quartz.Net, за да съхранявате заданията си в постоянни хранилища, т.е. можете да запазите заданията си и в базата данни. Можете да знаете списъка с всички поддържани магазини за работа от тук.