Merhaba arkadaşlar,
Bu bölümde sizlere .net core 2.0 ile beraber gelen HostedService işlemlerini anlatmaya çalışacağım. HostedService arkaplanda belirli zamanlarda zamanlanmış görevlerimizin çalışmasını sağlar. .net core Microsoft.Extensions.Hosting ile gelen bu özellik sayesinde zamanlanmış görevleriniz için ekstra Windows servis yazmaya yada hangfire gibi çok fazla kaynak tüketen uygulamaları kullanmaya gerek kalmayacak. Yönetimde tamamen sizin elinizde olacak. Belirli zamanlarda periyodik olarak çalışmasını istediğiniz işlemlerinizi bir sınıfta belirterek HostedService sınıfından türetip injection larınızı yapmanız yeterli olacaktır. Web uygulamanız ayağa kalktığında arkaplanda servislerinizde asenkron olarak çalışmaya başlayacaktır. Ben boş bir .net core 2.0 web projesi oluşturdum. Sonrasında ise projemize HostedService isimli abstract bir class ekliyoruz.
HostedService classımıza using Microsoft.Extensions.Hosting; referece ını ekledikten sonra IHostedService, IDisposable interface lerini implement ediyoruz.
Sınıfımızın son hali yukarıdaki gibi olacaktır. Base alınacak HostedService sınıfımız hazır durumda. Şimdi zamanlanmış işlemlerimizin yapılmasını sağlayacak Service sınıflarımızı yazalım.
Ben ScheduleServices klasörü adı altında 2 tane zamanlanmış servis sınıfı ekledim.
MailService : her 10 saniyede bir çalışarak mail gönderimi yapacak. (Not:Örnek olması açısından sadece output ekranında görünmesi için Debug.WriteLine yaptım gerçek business işlemini yazmadım ama yaptığını var sayıcaz.)
Bir tanede kullanıcılara Bildirim göndermesi için NotificationService adında yeni bir sınıf ekledim.
NotificationService : her 15 saniyede bir çalışarak bildirim gönderimi yapacak. (Not:Örnek olması açısından sadece output ekranında görünmesi için Debug.WriteLine yaptım gerçek business işlemini yazmadım ama yaptığını var sayıcaz.)
Artık zamanlanmış iş yapmasını istediğimiz işlemler hazır durumda. Sırada uygulama ayağa kalktığında otomatik olarak bu servisleride çalışır hale getirmek kaldı. Bu işlemide Startup sınıfında ConfigureServices methodunda yapacağız. Yani injectionlarımızın gerçekleştiği yerde.
IHostedService interface i kalıtım alan servislerimizin injection işlemini gerçekleştirdik. AddSingleton olmasının sebebi bu servisler uygulama ilk ayağa kaltığında hep çalışacaklar sadece uygulama durdurulursa servisler duracak. İsterseniz yeni yazacağınız servisleride burada injection işlemlerini yaparak arkaplanda çalışacak görevlerinize dahil edebilirsiniz. Uygulamamızı çalıştırdığımızda OutPut da asenkron bir şekilde çalıştığını görebiliriz.
Github
Umarım yararlı olabilmişimdir.
Saygılarımla
gokhan_bilisim@hotmail.com2/1/2019 1:09:01 PM
Bunu genelde can çekişerek Quartz.net kütüphanesiyle yapıyorduk. Durdurma, geri başlatma gibi özellikleri de varsa, bu işlem çok basit ve güzel görünüyor. Hatta, bu görevleri dinamik ekleme olasılığımız olsa, veri tabanından ayar çeklip, şu method, şu kadar sürede bu method şukadar sürede çalışsın diyebilsek çok iyi olur. Cancellation Token olayını bir türlü çözemedim, onu da anlatsanız süper olur.