So arbeiten Sie mit Quartz.Net in C #

Wenn Sie an Anwendungen arbeiten, müssen Sie häufig bestimmte Aufgaben im Hintergrund in vordefinierten Zeitintervallen ausführen. Das Planen von Jobs in Anwendungen ist eine Herausforderung, und Sie können aus vielen verfügbaren Frameworks wie Quarz, Hangfire usw. auswählen.

Quartz.Net wird seit langem verwendet und bietet eine bessere Unterstützung für die Arbeit mit Cron-Ausdrücken. Hangfire ist ein weiteres Job Scheduler-Framework, das die Anforderungsverarbeitungspipeline von ASP.Net für die Verarbeitung und Ausführung von Jobs nutzt.

Quartz.Net ist ein .NET-Port des beliebten Java Job Scheduling Framework. Es ist ein Open-Source-Jobplanungssystem, das von kleinsten Apps bis hin zu großen Unternehmenssystemen verwendet werden kann. Auf der offiziellen Website von Quartz.Net heißt es: "Quartz.Net ist ein Open-Source-Jobplanungssystem mit vollem Funktionsumfang, das von kleinsten Apps bis hin zu großen Unternehmenssystemen verwendet werden kann."

Anfangen

Sie können Quartz.Net im Download-Bereich der offiziellen Quartz-Website installieren. Sie können Quartz.Net auch über das Paketmanager-Fenster in Ihrer Visual Studio-IDE installieren.

Die drei Hauptkomponenten in Quartz sind Jobs, Trigger und Scheduler. Um Jobs in Quartz.Net zu erstellen und zu planen, benötigen Sie Scheduler, Trigger und Jobs. Während ein Job die Aufgabe angibt, die ausgeführt werden muss, wird ein Trigger verwendet, um anzugeben, wie der Job ausgeführt werden soll. Der Scheduler ist die Komponente, die die Jobs plant. Beachten Sie, dass Sie Ihre Jobs und Trigger beim Scheduler registrieren sollten.

Programmieren von Quartz.Net in C #

Um einen Job zu erstellen, sollten Sie eine Klasse erstellen, die die IJob-Schnittstelle implementiert. Diese Schnittstelle deklariert übrigens die Execute-Methode - Sie sollten diese Methode in Ihrer benutzerdefinierten Jobklasse implementieren. Das folgende Codeausschnitt zeigt, wie Sie die IJob-Schnittstelle implementieren können, um mithilfe der Quartz.Net-Bibliothek eine benutzerdefinierte Jobklasse zu entwerfen.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Hier ist eine einfache Implementierung der Execute-Methode der Jobklasse. Ich überlasse es Ihnen, Ihre benutzerdefinierte Jobklasse so zu gestalten, dass sie den Anforderungen Ihrer Anwendung entspricht. Das unten angegebene Code-Snippet schreibt den aktuellen DateTime-Wert als Text in eine Datei. Beachten Sie, dass diese Implementierung nicht threadsicher ist. Es dient nur zu Illustrationszwecken.

public void Execute(IJobExecutionContext context)

        {

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

            {

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

            }

        }

Nachdem Sie die Jobklasse bereits definiert haben, müssen Sie Ihre eigene Job Scheduler-Klasse erstellen und den Auslöser für Ihren Job definieren. Der Trigger enthält die Metadaten des Jobs als Cron-Ausdruck. Sie können diesen Link besuchen, um Cron-Ausdrücke zu generieren.

Wie sind die Jobs geplant? Nun, es gibt eine Komponente namens Job Scheduler, die für die Planung Ihrer Jobs verantwortlich ist. Im Wesentlichen können Sie Job Scheduler nutzen, um Ihre Jobs für die Ausführung zu planen. Die folgende Codeliste zeigt, wie wir einen Trigger für unseren Job definieren und dann den Job und den Trigger beim Job Scheduler registrieren können.

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

       }

   }

Siehe die oben angegebene Codeliste. Beachten Sie, wie der Name und die Gruppe des Triggers beim Erstellen der Triggerinstanz angegeben wurden. Sobald der Trigger für den Job mithilfe des erforderlichen Cron-Ausdrucks definiert und konfiguriert wurde, wird der Trigger beim Job Scheduler registriert.

Sie können auch einen Auslöser erstellen, der jede Sekunde ausgelöst wird und auf unbestimmte Zeit wiederholt wird. Hier ist ein Code-Snippet, das zeigt, wie Sie einen solchen Trigger erstellen können.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Sie benötigen nicht immer einen Windows-Dienst, um Ihren Scheduler zu starten. Wenn Sie eine ASP.Net-Webanwendung verwenden, können Sie das Application_Start-Ereignis der Global.asax-Datei nutzen und dann die JobScheduler.Start () -Methode aufrufen, wie im folgenden Codeausschnitt gezeigt.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Beachten Sie, dass JobScheduler der Name der zuvor entworfenen benutzerdefinierten Klasse ist. Beachten Sie, dass Sie Quartz.Net auch nutzen können, um Ihre Jobs in dauerhaften Speichern zu speichern, dh Sie können Ihre Jobs auch in der Datenbank beibehalten. Die Liste aller unterstützten Jobstores finden Sie hier.