Quarz.NET und C# – Ein einfaches Beispiel

Es ist immer wieder hilfreich einen bestimmten Task in einem bestimmten Zeitpunkt oder Zeitraum zu starten und auszuführen. Für das .NET-Framework gibt es seit einiger Zeit das Projekt Quarz.NET. Dieses wird stätig weiterentwickelt und gepflegt. Seit einiger Zeit befindet es sich auch in der NuGet-Gallery wieder, was die Installation in eine Projekt, für Anfänger erleichtert.

Wir starten unser Beispiel, indem wir eine neue Konsolenanwendung in der Sprache C# in VisualStudio erstellen.

Erstellen des Projekts für Quarz.NET in VisualStudio
Erstellen des Projekts für Quarz.NET in VisualStudio

Als nächstes öffnen wir den Projektbaum unseres Programms und öffnen die „NuGet-Pakete verwalten…“-Option

Hinzufügen von Quarz.NET per NuGet Verwaltung
Hinzufügen von Quarz.NET per NuGet Verwaltung

In der NuGet-Verwaltung suchen wir nach Quartz. Hier werden wir sofort fündig..

NuGet stellt das Paket von Quarz.NET direkt bereit
NuGet stellt das Paket von Quarz.NET direkt bereit

Diesen Verweis lassen wir nun in unser Projekt installieren. Fehlende Abhängigkeiten werden automatisch aufgelöst und somit weitere notwendige Verweise ggf. nachgepflegt.

Das NuGet Paket wird dem Projekt automatisch hinzugefügt
Das NuGet Paket wird dem Projekt automatisch hinzugefügt

In unserem Projekt finden wir unter Verweise nun Quarz wieder

Der Verweis auf NuGet befindet sich dann direkt im Projekt wieder
Der Verweis auf NuGet befindet sich dann direkt im Projekt wieder

Als nächstes benötigen wir ein Programm. Hier ist ein Beispiel, das etwas von den Beispielen auf der offiziellen Webseite beinhaltet.

using Quartz;
using Quartz.Impl;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Quarz_NET
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };

                // Scheduler mit Default-Werten anlegen
                IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

                // Scheduler starten
                scheduler.Start();

                // Einen neuen Job erstellen. Dafür die Klasse TestExec nutzten
                IJobDetail job = JobBuilder.Create<TestExec>()
                    .WithIdentity("job1", "group1")
                    .Build();

                // Einen Trigger erstellen, der das Programm alle 10.Sekunden startet
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .StartNow()
                    .WithSimpleSchedule(x => x
                        .WithIntervalInSeconds(10)
                        .RepeatForever())
                    .Build();

                // Im Scheduler den Job und den Trigger übergeben
                scheduler.ScheduleJob(job, trigger);

                Console.WriteLine("Tastendruck beendet Ablauf");
                Console.ReadKey();

                // Wenn Taste gedrückt, dann Programm beenden
                scheduler.Shutdown();
            }
            catch (SchedulerException se)
            {
                Console.WriteLine(se);
            }
        }

        public class TestExec : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                //Ausgabe des gestarteten Task mit Uhrzeit + Millisekunden
                DateTime DateTimeNow = DateTime.Now;
                Console.WriteLine(DateTimeNow.ToString("yyyy-MM-dd HH:mm:ss.fff") + "Task wurde ausgelöst!");
            }
        }
    }
}

 

Wenn wir das Programm nun per drücken auf F5 starten beginnt sich die Konsole zu öffnen und eine Ausgabe geschieht. Anhand des Codes und den Kommentaren sollte der logische Programablauf sichtbar sein.

Ausgabe des Programms in der Konsole

Ausgabe des Programms in der Konsole

 


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert