Jak pracować z Quartz.Net w C #

Podczas pracy nad aplikacjami często trzeba wykonywać określone zadania w tle w określonych odstępach czasu. Planowanie zadań w aplikacjach jest wyzwaniem i możesz wybierać spośród wielu dostępnych frameworków, takich jak Quartz, Hangfire itp.

Quartz.Net jest używany przez długi czas i zapewnia lepszą obsługę wyrażeń Cron. Hangfire to kolejna platforma harmonogramu zadań, która wykorzystuje potok przetwarzania żądań ASP.Net do przetwarzania i wykonywania zadań.

Quartz.Net to port .Net popularnej platformy planowania zadań w języku Java. Jest to system planowania zadań typu open source, który może być używany od najmniejszych aplikacji do dużych systemów korporacyjnych. Oficjalna witryna Quartz.Net stwierdza: „Quartz.Net to w pełni funkcjonalny system planowania zadań typu open source, z którego można korzystać zarówno w najmniejszych aplikacjach, jak i w dużych systemach korporacyjnych”.

Pierwsze kroki

Możesz zainstalować Quartz.Net z sekcji pobierania na oficjalnej stronie Quartz. Możesz również zainstalować Quartz.Net za pośrednictwem okna Menedżera pakietów w środowisku IDE programu Visual Studio.

Trzy główne komponenty Quartz to zadania, wyzwalacze i harmonogramy, tj. Aby tworzyć i planować zadania w Quartz.Net, musisz mieć harmonogramy, wyzwalacze i zadania. Podczas gdy zadanie oznacza zadanie, które ma zostać wykonane, wyzwalacz służy do określenia sposobu wykonania zadania. Program planujący to składnik, który planuje zadania. Pamiętaj, że powinieneś zarejestrować swoje zadania i wyzwalacze w programie planującym.

Programowanie Quartz.Net w C #

Aby utworzyć zadanie, należy utworzyć klasę, która implementuje interfejs IJob. Nawiasem mówiąc, ten interfejs deklaruje metodę Execute - należy zaimplementować tę metodę w niestandardowej klasie zadań. Poniższy fragment kodu ilustruje sposób implementacji interfejsu IJob w celu zaprojektowania niestandardowej klasy zadań przy użyciu biblioteki Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Oto prosta implementacja metody Execute klasy Job - pozostawiam Ci zaprojektowanie niestandardowej klasy zadania, która będzie odpowiadała potrzebom Twojej aplikacji. Podany poniżej fragment kodu zapisuje bieżącą wartość DateTime jako tekst do pliku. Zauważ, że ta implementacja nie jest bezpieczna dla wątków; jest to tylko w celach ilustracyjnych.

public void Execute(IJobExecutionContext context)

        {

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

            {

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

            }

        }

Teraz, gdy już zdefiniowałeś klasę zadań, musisz utworzyć własną klasę harmonogramu zadań i zdefiniować wyzwalacz dla swojego zadania. Wyzwalacz będzie zawierał metadane zadania jako wyrażenie cron. Możesz odwiedzić ten link, aby wygenerować wyrażenia cron.

Jak to jest, że zadania są zaplanowane? Cóż, istnieje komponent zwany harmonogramem zadań, który jest odpowiedzialny za planowanie zadań. Zasadniczo można skorzystać z programów do planowania zadań, aby zaplanować zadania do wykonania. Poniższy kod ilustruje, w jaki sposób możemy zdefiniować wyzwalacz dla naszego zadania, a następnie zarejestrować zadanie i wyzwalacz w programie do planowania zadań.

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);

       }

   }

Zapoznaj się z listą kodów podaną powyżej. Zwróć uwagę, jak nazwa i grupa wyzwalacza została określona podczas tworzenia instancji wyzwalacza. Po zdefiniowaniu i skonfigurowaniu wyzwalacza dla zadania przy użyciu wymaganego wyrażenia cron, wyzwalacz jest rejestrowany w programie do planowania zadań.

Możesz równie dobrze zbudować wyzwalacz, który jest uruchamiany co sekundę i powtarza go w nieskończoność. Oto fragment kodu, który ilustruje, jak można zbudować taki wyzwalacz.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Nie zawsze potrzebujesz usługi systemu Windows do uruchomienia harmonogramu. Jeśli korzystasz z aplikacji internetowej ASP.Net, możesz skorzystać ze zdarzenia Application_Start pliku Global.asax, a następnie wywołać metodę JobScheduler.Start (), jak pokazano na poniższym fragmencie kodu.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Zwróć uwagę, że JobScheduler to nazwa klasy niestandardowej, którą zaprojektowaliśmy wcześniej. Zauważ, że możesz również wykorzystać Quartz.Net do przechowywania swoich zadań w trwałych magazynach, tj. Możesz również zachować swoje zadania w bazie danych. Tutaj możesz poznać listę wszystkich obsługiwanych sklepów z ofertami pracy.