QuartzNet-Using · Quartz.NET ile Periyodik Görev Zamanlama

IJob, JobBuilder, TriggerBuilder ve StdSchedulerFactory ile beş dakikalık tekrar zamanlamasını gösteren Quartz.NET öğrenme örneği.

Bir işin ne yapacağı ile ne zaman çalışacağı ayrı ayrı tanımlanabilir. QuartzNet-Using, bu ayrımı .NET Framework 4.7.2 üzerinde çalışan küçük bir konsol örneğiyle gösteriyor. Quartz.NET 3.2.4 kullanan uygulamada görev konsola Hello yazıyor. İlk çalışma zamanı uygulama açılırken belirleniyor ve tetikleyici aynı işi beş dakikalık aralıklarla yeniden çağıracak şekilde kuruluyor.

Görev ve zamanlama nasıl bağlanıyor?

Job sınıfı Quartz’ın IJob arayüzünü uyguluyor. Zamanlayıcı işi çalıştırdığında Execute metodu ekrana bir satır yazıp Task.CompletedTask döndürüyor. Görevin tekrar sıklığı bu sınıfın dışında. Program bir Trigger örneği oluşturup TriggerJob metodunu çağırıyor. Bu metot StdSchedulerFactory üzerinden zamanlayıcıyı alıyor, gerekiyorsa başlatıyor ve JobBuilder ile oluşturduğu iş tanımını tetikleyiciyle birlikte kaydediyor.

TriggerBuilder, başlangıç anı için DateTime.UtcNow değerini kullanıyor. WithIntervalInMinutes(5) tekrar aralığını, RepeatForever() ise tekrar sayısının sınırlandırılmadığını ifade ediyor. Buradaki beş dakika günün sabit saatlerine göre seçilmiyor. Örneğin ilk çalıştırma 14.02 civarına denk gelirse sonraki tetiklemeler 14.07 ve 14.12 civarına planlanıyor. Konsol Console.ReadKey() ile açık tutulduğu sürece aynı çalıştırmada birden fazla Hello satırı görülebiliyor.

Aynı düzen bir kontrol görevine nasıl uyarlanabilir?

Bir içe aktarma klasörünü belirli aralıklarla kontrol eden yardımcı uygulama düşünelim. Klasörde yeni dosya arama işlemi Execute içinde yer alabilir. Kontrol sıklığı değiştiğinde iş koduna dokunmadan tetikleyicinin aralığı güncellenebilir. Tersine, klasörü taramak yerine bir servis durumunu kontrol etmek gerekirse zamanlama tanımı aynı kalabilir. İki durumda da tetikleme zamanını Quartz belirler ve Execute metodu çağrıldığında işin o çalıştırması başlar. Depodaki Hello satırı, bu iki değişikliğin farklı kod bölümlerine ait olduğunu kolayca izlenebilir kılıyor.

Örnekteki çalışma takvimi konsol sürecinin ömrüne bağlı. Uygulama yeniden açıldığında başlangıç zamanı yeniden hesaplanıyor. Bir takvim kuralına göre her gün belirli bir saatte yapılacak bir iş ise farklı bir tetikleyici tanımı gerektirir. Konsol örneğinde bu ayrımı görmek için uygulama açılırken gelen ilk satırla birkaç dakika sonra gelen ikinci satırı aynı oturumda gözlemlemek yeterli.