Come lavorare con Quartz.Net in C #

Quando si lavora sulle applicazioni, spesso è necessario eseguire determinate attività in background a intervalli di tempo predefiniti. La pianificazione dei lavori nelle applicazioni è una sfida e puoi scegliere tra molti framework disponibili in giro, come Quartz, Hangfire, ecc.

Quartz.Net è in uso da molto tempo e fornisce un supporto migliore per lavorare con le espressioni Cron. Hangfire è un altro framework di pianificazione dei lavori che sfrutta la pipeline di elaborazione delle richieste di ASP.Net per l'elaborazione e l'esecuzione dei lavori.

Quartz.Net è una porta .Net del popolare framework di pianificazione dei lavori Java. È un sistema di pianificazione dei lavori open source che può essere utilizzato dalle app più piccole ai sistemi aziendali su larga scala. Il sito web ufficiale di Quartz.Net afferma: "Quartz.Net è un sistema di pianificazione dei lavori open source completo che può essere utilizzato dalle app più piccole ai sistemi aziendali su larga scala".

Iniziare

Puoi installare Quartz.Net dalla sezione download del sito web ufficiale di Quartz. Puoi anche installare Quartz.Net tramite la finestra Gestione pacchetti nel tuo IDE di Visual Studio.

I tre componenti principali di Quartz sono i lavori, i trigger e gli scheduler, cioè, per creare e pianificare i lavori in Quartz.Net, dovresti avere scheduler, trigger e job. Mentre un lavoro denota l'attività che deve essere eseguita, viene utilizzato un trigger per specificare come verrà eseguito il lavoro. Lo scheduler è il componente che pianifica i lavori. Notare che è necessario registrare i lavori e i trigger con lo scheduler.

Programmazione di Quartz.Net in C #

Per creare un lavoro, è necessario creare una classe che implementa l'interfaccia IJob. Per inciso, questa interfaccia dichiara il metodo Execute: dovresti implementare questo metodo nella tua classe di lavoro personalizzata. Il seguente frammento di codice illustra come implementare l'interfaccia IJob per progettare una classe di lavoro personalizzata utilizzando la libreria Quartz.Net.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

Ecco una semplice implementazione del metodo Execute della classe Job: lascerò a te il compito di progettare la tua classe di lavoro personalizzata in base alle esigenze della tua applicazione. Lo snippet di codice riportato di seguito scrive il valore DateTime corrente come testo in un file. Notare che questa implementazione non è thread-safe; è solo a scopo illustrativo.

public void Execute(IJobExecutionContext context)

        {

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

            {

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

            }

        }

Ora che hai già definito la classe di lavoro, dovrai creare la tua classe di pianificazione lavori e definire il trigger per il tuo lavoro. Il trigger conterrà i metadati del lavoro come espressione cron. È possibile visitare questo collegamento per generare espressioni cron.

Ora, come sono programmati i lavori? Bene, c'è un componente chiamato job scheduler che è responsabile della pianificazione dei tuoi lavori. In sostanza, puoi sfruttare i programmi di pianificazione dei lavori per pianificare l'esecuzione dei tuoi lavori. Il seguente elenco di codice illustra come possiamo definire un trigger per il nostro lavoro e quindi registrare il lavoro e il trigger con il pianificatore di lavori.

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

       }

   }

Fare riferimento all'elenco dei codici riportato sopra. Notare come il nome e il gruppo del trigger sono stati specificati durante la creazione dell'istanza del trigger. Una volta definito e configurato il trigger per il lavoro utilizzando l'espressione cron necessaria, il trigger viene registrato con lo scheduler del lavoro.

Puoi anche costruire un trigger che viene attivato ogni secondo e lo ripete indefinitamente. Ecco uno snippet di codice che illustra come creare un trigger come questo.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

Non è sempre necessario un servizio Windows per avviare lo scheduler. Se si utilizza un'applicazione Web ASP.Net, è possibile sfruttare l'evento Application_Start del file Global.asax e quindi effettuare una chiamata al metodo JobScheduler.Start () come mostrato nello snippet di codice seguente.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

Nota che JobScheduler è il nome della classe personalizzata che abbiamo progettato in precedenza. Nota che puoi anche sfruttare Quartz.Net per memorizzare i tuoi lavori in archivi persistenti, cioè puoi anche rendere persistenti i tuoi lavori nel database. Puoi conoscere l'elenco di tutti i job store supportati da qui.