Comment travailler avec Quartz.Net en C #

Lorsque vous travaillez sur des applications, vous devrez souvent exécuter certaines tâches en arrière-plan à des intervalles de temps prédéfinis. La planification des tâches dans les applications est un défi, et vous pouvez choisir parmi de nombreux frameworks disponibles, tels que Quartz, Hangfire, etc.

Quartz.Net est utilisé depuis longtemps et fournit un meilleur support pour travailler avec les expressions Cron. Hangfire est encore un autre framework de planificateur de travaux qui tire parti du pipeline de traitement des demandes d'ASP.Net pour le traitement et l'exécution des travaux.

Quartz.Net est un port .Net du célèbre framework de planification de travaux Java. Il s'agit d'un système de planification de travaux open source qui peut être utilisé des plus petites applications aux systèmes d'entreprise à grande échelle. Le site officiel de Quartz.Net déclare: "Quartz.Net est un système de planification de travaux open source complet qui peut être utilisé des plus petites applications aux systèmes d'entreprise à grande échelle."

Commencer

Vous pouvez installer Quartz.Net à partir de la section des téléchargements du site Web officiel de Quartz. Vous pouvez également installer Quartz.Net via la fenêtre du gestionnaire de package dans votre IDE Visual Studio.

Les trois principaux composants de Quartz sont les tâches, les déclencheurs et les planificateurs, c'est-à-dire que pour créer et planifier des travaux dans Quartz.Net, vous devez avoir des planificateurs, des déclencheurs et des travaux. Alors qu'un travail indique la tâche à exécuter, un déclencheur est utilisé pour spécifier comment le travail sera exécuté. Le planificateur est le composant qui planifie les travaux. Notez que vous devez enregistrer vos travaux et déclencheurs auprès du planificateur.

Programmation de Quartz.Net en C #

Pour créer un travail, vous devez créer une classe qui implémente l'interface IJob. Incidemment, cette interface déclare la méthode Execute - vous devez implémenter cette méthode dans votre classe de travail personnalisée. L'extrait de code suivant illustre comment vous pouvez implémenter l'interface IJob pour concevoir une classe de travail personnalisée à l'aide de la bibliothèque Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Voici une implémentation simple de la méthode Execute de la classe Job - Je vous laisse le soin de concevoir votre classe d'emploi personnalisée en fonction des besoins de votre application. L'extrait de code ci-dessous écrit la valeur DateTime actuelle sous forme de texte dans un fichier. Notez que cette implémentation n'est pas thread-safe; c'est juste à des fins d'illustration seulement.

public void Execute(IJobExecutionContext context)

        {

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

            {

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

            }

        }

Maintenant que vous avez déjà défini la classe de travaux, vous devez créer votre propre classe de planificateur de travaux et définir le déclencheur de votre travail. Le déclencheur contiendra les métadonnées du travail en tant qu'expression cron. Vous pouvez visiter ce lien pour générer des expressions cron.

Maintenant, comment les travaux sont-ils planifiés? Eh bien, il existe un composant appelé planificateur de travaux qui est responsable de la planification de vos travaux. En gros, vous pouvez profiter des planificateurs de travaux pour planifier l'exécution de vos travaux. La liste de codes suivante illustre comment nous pouvons définir un déclencheur pour notre travail, puis enregistrer le travail et le déclencheur avec le planificateur de travaux.

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

       }

   }

Reportez-vous à la liste des codes ci-dessus. Notez comment le nom et le groupe du déclencheur ont été spécifiés lors de la création de l'instance de déclencheur. Une fois le déclencheur du travail défini et configuré à l'aide de l'expression cron requise, le déclencheur est enregistré auprès du planificateur de travaux.

Vous pouvez également créer un déclencheur qui se déclenche toutes les secondes et le répète indéfiniment. Voici un extrait de code qui illustre comment créer un déclencheur comme celui-ci.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Vous n'avez pas toujours besoin d'un service Windows pour démarrer votre planificateur. Si vous utilisez une application Web ASP.Net, vous pouvez profiter de l'événement Application_Start du fichier Global.asax, puis effectuer un appel à la méthode JobScheduler.Start () comme indiqué dans l'extrait de code ci-dessous.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Notez que JobScheduler est le nom de la classe personnalisée que nous avons conçue précédemment. Notez que vous pouvez également utiliser Quartz.Net pour stocker vos travaux dans des stockages persistants, c'est-à-dire que vous pouvez également conserver vos travaux dans la base de données. Vous pouvez connaître la liste de tous les magasins d'emplois pris en charge à partir d'ici.