Programování

Jak pracovat s Quartz.Net v C #

Při práci na aplikacích budete často muset provádět určité úkoly na pozadí v předdefinovaných časových intervalech. Plánování úloh v aplikacích je výzvou a můžete si vybrat z mnoha dostupných rámců, jako je Quartz, Hangfire atd.

Quartz.Net se používá již dlouhou dobu a poskytuje lepší podporu pro práci s výrazy Cron. Hangfire je ještě další rámec plánovače úloh, který využívá kanálu zpracování požadavků ASP.Net pro zpracování a provádění úloh.

Quartz.Net je port .Net populárního rámce pro plánování úloh Java. Je to systém plánování úloh s otevřeným zdrojovým kódem, který lze použít od nejmenších aplikací po rozsáhlé podnikové systémy. Oficiální web Quartz.Net uvádí: „Quartz.Net je plně vybavený systém plánování úloh s otevřeným zdrojovým kódem, který lze použít od nejmenších aplikací po velké podnikové systémy.“

Začínáme

Quartz.Net můžete nainstalovat z části ke stažení na oficiálních stránkách Quartz. Quartz.Net můžete také nainstalovat prostřednictvím okna Správce balíčků v IDE sady Visual Studio.

Tři primární komponenty v Quartz jsou úlohy, triggery a plánovače, tj. K vytváření a plánování úloh v Quartz.Net byste potřebovali mít plánovače, triggery a úlohy. Zatímco úloha označuje úkol, který je třeba provést, pomocí spouště se určí, jak bude úloha provedena. Plánovač je komponenta, která naplánuje úlohy. Mějte na paměti, že své úlohy a spouštěče byste měli zaregistrovat v plánovači.

Programování Quartz.Net v C #

Chcete-li vytvořit úlohu, měli byste vytvořit třídu, která implementuje rozhraní IJob. Mimochodem, toto rozhraní deklaruje metodu Execute - tuto metodu byste měli implementovat ve své vlastní třídě úloh. Následující fragment kódu ukazuje, jak můžete implementovat rozhraní IJob a navrhnout vlastní třídu úloh pomocí knihovny Quartz.Net.

veřejná třída Práce: IJob

   {

public void Execute (kontext IJobExecutionContext)

       {

// Ukázkový kód, který označuje úlohu, která má být provedena

       }

   }

Zde je jednoduchá implementace metody Execute třídy Job - nechám na vás, abyste navrhli vlastní třídu úloh tak, aby vyhovovala potřebám vaší aplikace. Fragment kódu uvedený níže zapíše aktuální hodnotu DateTime jako text do souboru. Tato implementace není bezpečná pro vlákna; slouží pouze pro ilustraci.

public void Execute (kontext IJobExecutionContext)

        {

pomocí (StreamWriter streamWriter = nový StreamWriter (@ "D: \ Log.txt", true))

            {

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

            }

        }

Nyní, když jste již definovali třídu úloh, budete muset vytvořit vlastní třídu plánovače úloh a definovat spouštěč úlohy. Spouštěč bude obsahovat metadata úlohy jako výraz cron. Tento odkaz můžete navštívit a generovat výrazy cron.

Jak je to, že jsou úlohy naplánovány? K dispozici je komponenta zvaná plánovač úloh, která je zodpovědná za plánování vašich úloh. V podstatě můžete využít plánovače úloh k naplánování provedení úloh. Následující výpis kódu ukazuje, jak můžeme definovat aktivační událost pro naši úlohu a poté registrovat úlohu a aktivační událost pomocí plánovače úloh.

veřejná třída JobScheduler

   {

public static void Start ()

       {

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler ();

scheduler.Start ();

IJobDetail job = JobBuilder.Create (). Build ();

Spouštěč ITrigger = TriggerBuilder.Create ()

.WithIdentity ("Job", "")

.WithCronSchedule ("0 0/1 * 1/1 *? *")

.StartAt (DateTime.UtcNow)

.WithPriority (1)

.Stavět();

scheduler.ScheduleJob (job, trigger);

       }

   }

Viz výše uvedený seznam kódů. Všimněte si, jak byl název a skupina spouštěče zadána při vytváření instance spouštěče. Jakmile je spouštěč pro úlohu definován a nakonfigurován pomocí potřebného výrazu cron, je spouštěč zaregistrován v plánovači úloh.

Můžete také vytvořit spouštěč, který se spouští každou sekundu a opakuje jej neomezeně dlouho. Zde je fragment kódu, který ilustruje, jak můžete vytvořit spouštěč takhle.

Spouštěč ITrigger = TriggerBuilder.Create ()

.WithIdentity ("Job", "")

.StartNow ()

.WithSimpleSchedule (s => s

.WithIntervalInSeconds (10)

.RepeatForever ())

.Stavět();

Ke spuštění plánovače nemusíte vždy používat službu Windows. Pokud používáte webovou aplikaci ASP.Net, můžete využít událost Application_Start souboru Global.asax a poté zavolat metodu JobScheduler.Start (), jak je ukázáno v níže uvedeném fragmentu kódu.

veřejná třída Global: HttpApplication

   {

void Application_Start (odesílatel objektu, EventArgs e)

       {

// Kód, který běží při spuštění aplikace

JobScheduler.Start ();

       }

   }

Všimněte si, že JobScheduler je název vlastní třídy, kterou jsme navrhli dříve. Všimněte si, že můžete Quartz.Net využít také k ukládání úloh do trvalých úložišť, tj. Můžete také uchovat úlohy v databázi. Seznam všech podporovaných obchodů s úlohami můžete znát odtud.