Bir çok uygulamada, web veya windows fark etmeksizin, bazı iş gereksinimlerinden dolayı belli bir rutinde bazı işlemler yapmak gerekir. Hatta olmazsa olmaz gereksinimlerden biridir. Peki bu rutinleri oluşturmak,yönetmek nasıl oluyor ya da olacak?
Windows Service yazarak bu tip işleri yapmak sanırım ilk akla gelen ve sıklıkla yapılan şey. Doğruluğunu bir kenara atarsak, bu tarz işlerin önceden böyle yapılıyor olması ve bir şekilde düzgün işliyor olması geliştiricileri de windows servisi yazmaya yönlendiriyor.Tabi ki gereksinim ve tasarımlara göre başka yollarda düşünülmüyor değil ama belli bir rutin içerisinde yapılacak bir iş gereksinimi geldiği zaman, doğruya doğru ilk akla gelen windows servis yazmak oluyor. En azından benim gözlemlediğim.
Bir senaryo üzerinden gidelim. Basit bir iş uygulamamız var diyelim. Kullanıcı etkili ya da kendi çapında bir şeyler yapıyor işte. Yapılan işlemlerin sonucunda belli zamanlarda rapor almak istiyoruz; dosya ya yazma,grafik oluşturma .vs gibi.Gayet standart bilindik bir senaryo.
İlk akla gelen yöntem bir windows servis yazmak olur sanırım. %80’lik bir kısımın ilk düşüneceği şeyin bu olduğuna eminim, ki benim de ilk aklıma bu gelirdi. Doğru da aslında, bir windows servis ile bu olay istenilen şekilde çözülebilir.Timer,DateTime ya da user-desinged object’ler ile bir şekilde yapılır.Ama sistem performansını etkileyen,arka planda sürekli çalışan,bir şeyler sayan,yapan,kontolü zor olan bir olay olacaktır bu.Operasyonel maliyeti diğer alternatifleri ile karşılaştırıldığında da mantıklı bir değer mi olur bilemem ama bu senaryo için bence olmaz.
Windows servisleri başlar,çalışır, işlemler yapar,böyle devam eder. Asıl amacı da budur zaten. Arka planda uygulamanın ya da sistem işlemlerinin bir şekilde bir yerlerden bilgi almasını,vermesini falan sağlamak amacıyla ortaya çıkmıştır servisler.Başka bir hizmetin düzgün çalışmasını yada kendi bir hizmet vermek amacıyla ortaya çıkmıştır. Bu anlamda bakıldığında bu tip bir senaryo için Windows Service çok da uygun değil sanırım.
Bu tarz gereksinimler için zaten Windows işletim sisteminin bize sunmuş olduğu Zamanlanmış Görevler(Scheduled Tasks) kavramı var. Yukarıda ki gibi bir gereksinimi neden bu şekilde yapmayalım ki. Basit bir konsol uygulaması yukarıdaki senaryoyu gerçekleştirecek,scheduled tasks da ne zaman gerçekleştirecek buna karar verecek.
İki kavramı düşününce Zamanlanmış Görev mantığı ile çalışan programımızı yönetmek çok daha kolay olacaktır. Service Control Manager’ın kendi içinde ki hatalardan dolayı yazmış olduğumuz servisin çalışmama durumu, servislerin geliştirme aşamasındaki zorluğu gibi kavramlar ortadan kalkmış oluyor bu şekilde.
Özetle bir çok kolaylık sağlayan windows servisleri gibi, başka kolaylıklar da sağlayan yararlanabileceğimiz kavramları da es geçmemek lazım sanırım. Bu yazı ile ilgili kendi uygulamamızdan windows’daki zamanlanmış görevleri nasıl kontrol ederiz konulu kod ağırlıklı bir yazıyı da haftaya koymaya çalışacağım.