Programmering

Sådan arbejder du med Quartz.Net i C #

Når du arbejder på applikationer, skal du ofte udføre bestemte opgaver i baggrunden i foruddefinerede tidsintervaller. Planlægning af job i applikationer er en udfordring, og du kan vælge mellem mange tilgængelige rammer omkring, såsom kvarts, Hangfire osv.

Quartz.Net har været i brug i lang tid og giver bedre support til at arbejde med Cron-udtryk. Hangfire er endnu en jobplanlægningsramme, der drager fordel af ASP.Net's anmodningsprocesser til behandling og udførelse af job.

Quartz.Net er en .Net-port i den populære Java-jobplanlægningsramme. Det er et open source jobplanlægningssystem, der kan bruges fra mindste apps til store virksomhedssystemer. Den officielle webside for Quartz.Net siger: "Quartz.Net er et fuldt udstyret, open source jobplanlægningssystem, der kan bruges fra mindste apps til store virksomhedssystemer."

Kom godt i gang

Du kan installere Quartz.Net fra downloads sektionen på Quartz officielle websted. Du kan også installere Quartz.Net gennem Package Manager-vinduet i din Visual Studio IDE.

De tre primære komponenter i Quartz er job, udløsere og planlæggere, dvs. for at oprette og planlægge job i Quartz.Net skal du have planlæggere, udløsere og job. Mens et job angiver den opgave, der skal udføres, bruges en trigger til at specificere, hvordan jobbet skal udføres. Planlæggeren er den komponent, der planlægger jobbet. Bemærk, at du skal registrere dine job og udløsere med planlæggeren.

Programmering af Quartz.Net i C #

For at oprette et job skal du oprette en klasse, der implementerer IJob-grænsefladen. I øvrigt erklærer denne grænseflade Execute-metoden - du skal implementere denne metode i din tilpassede jobklasse. Følgende kodestykke illustrerer, hvordan du kan implementere IJob-grænsefladen til at designe en brugerdefineret jobklasse ved hjælp af Quartz.Net-biblioteket.

offentlig klasse Job: IJob

   {

public void Execute (IJobExecutionContext context)

       {

// Prøvekode, der angiver det job, der skal udføres

       }

   }

Her er en simpel implementering af Execute-metoden i jobklassen - jeg overlader det til dig at designe din brugerdefinerede jobklasse, der passer til din applikations behov. Kodestykket, der er angivet nedenfor, skriver den aktuelle DateTime-værdi som en tekst til en fil. Bemærk, at denne implementering ikke er trådsikker; det er kun til illustration.

public void Execute (IJobExecutionContext context)

        {

ved hjælp af (StreamWriter streamWriter = ny StreamWriter (@ "D: \ Log.txt", sandt))

            {

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

            }

        }

Nu hvor du allerede har defineret jobklassen, skal du oprette din egen jobplanlægningsklasse og definere udløseren til dit job. Udløseren indeholder jobets metadata som cron-udtryk. Du kan besøge dette link for at generere cron-udtryk.

Hvordan er det, at jobene er planlagt? Der er en komponent kaldet jobplanlægning, der er ansvarlig for planlægning af dine job. I det væsentlige kan du drage fordel af jobplanlægere til at planlægge dine job til udførelse. Følgende kodeliste illustrerer, hvordan vi kan definere en trigger til vores job og derefter registrere job og triggeren med jobplanlæggeren.

offentlig klasse JobScheduler

   {

offentlig statisk ugyldighed 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)

.Byg ();

scheduler.ScheduleJob (job, trigger);

       }

   }

Se kodelisten ovenfor. Bemærk, hvordan navnet og gruppen på udløseren er blevet specificeret, når du opretter udløserforekomsten. Når udløseren til jobbet er defineret og konfigureret ved hjælp af det nødvendige cron-udtryk, registreres udløseren med jobplanlæggeren.

Du kan lige så godt bygge en trigger, der fyres hvert sekund og gentager den på ubestemt tid. Her er et kodestykke, der illustrerer, hvordan du kan oprette en trigger som denne.

ITrigger trigger = TriggerBuilder.Create ()

.WithIdentity ("Job", "")

.Start nu()

.WithSimpleSchedule (s => s

.WithIntervalInSeconds (10)

.RepeatForever ())

.Byg ();

Du har ikke altid brug for en Windows-tjeneste for at starte din planlægning. Hvis du bruger en ASP.Net-webapplikation, kan du drage fordel af Application_Start-hændelsen i Global.asax-filen og derefter ringe til JobScheduler.Start () -metoden som vist i kodestykket nedenfor.

offentlig klasse Global: HttpApplication

   {

ugyldig Application_Start (objektafsender, EventArgs e)

       {

// Kode, der kører ved opstart af applikationen

JobScheduler.Start ();

       }

   }

Bemærk, at JobScheduler er navnet på den brugerdefinerede klasse, vi designede tidligere. Bemærk, at du også kan udnytte Quartz.Net til at gemme dine job til vedvarende lagre, dvs. du kan også vedvare dine job i databasen. Du kan kende listen over alle understøttede jobbutikker herfra.