.NET Core’da Birden Fazla Worker ile Çalışmak

Umutcan Karakaş
3 min readJun 3, 2022

--

Çalışan (Worker) servisleri, belli aralıklarla tekrar etmek istediğimiz işlemleri otomatize etmede bize oldukça kolaylık sağlayan araçlardır. Fakat bazen tek bir çalışanın yetmediği, farklı sorumlulukları olan birden fazla çalışanın beraber çalışması gereken senaryolar olabiliyor. Bu yazımızda bu çalışanların nasıl birbirine engel olmadan, paralel bir şekilde çalışabileceğini öğreneceğiz.

Başlamadan önce önemli birkaç terimi öğrenmemiz gerekiyor:

  • BackgroundService: Arka plan servislerimizi türettiğimiz soyut sınıftır. “IHostedService” arayüzünü implemente eder.
  • IHostedService: .NET’te uzun süre çalışan tüm servislerin kullandığı temel arayüzdür. Arkaplanda çalışan işleri yapacak çalışan servisleri yaratmada kullanacağımız en önemli bileşendir.

BackgroundService, bizim için işleri biraz daha kolaylaştırmak amacıyla ASP.NET Core 3.0 ile eklenen bir sınıftır. Normal şartlar altında çalışan servislerimizi yaratıp kullanmamız için BackgroundService kullanmamız gayet yeterlidir; BackgroundService zaten temelde IHostedService’i kullanır. Fakat yine de BackgroundService sınıfının yetersiz kaldığı noktalar olabilir. O noktada gidip IHostedService ile çalışmamız gerekebilir. Bu şekilde kodumuz üzerinde, çalışan üzerinde daha fazla kontrol sahibi olabiliriz. Burada da yapacağımız şey o olacak.

Burada izlediğim ana döküman Microsoft’un kendi dökümanı: Implement the IHostedService interface, fakat kendi eklemelerim de olacak; özellikle ikinci çalışanı ekleme bölümünü ben ekliyor olacağım . Yine de isterseniz bu dökümana da göz atabilirsiniz, gayet temiz bir şekilde anlatılmış.

Öncelikle yeni bir çalışan servisi yaratmamız gerekiyor. Bunun için sırasıyla “Create a new project” diyerek yeni bir proje yaratıyoruz:

Açılan sayfada ise Worker Service seçimi yapıyoruz:

Projeyi isimlendiriyoruz. Birden fazla Timer servisi kullanan çalışan kullanacağımız için MultipleTimerWorkerService ismini veriyorum:

Son olarak .NET Core 3.1 seçiyoruz:

Create diyerek projemizi yaratıyoruz.

Solution Explorer bölümümüz şöyle görünüyor:

Burada Worker’ın içindeki kodu şu şekilde değiştiriyoruz:

Bu kod ilk çalışanın her 5 saniyede bir ekrana o zamana kadar yaptığı işlem sayısını bastırmasını sağlar.

Sonrasında ilk çalışana çok benzeyen ama aynı işi 10 saniyede bir tekrarlayan bir çalışan yaratıyoruz. İsmi SecondWorker olan çalışanın kodu şu şekilde:

Son olarak Program.cs dosyamıza bu yeni yarattığımız çalışanı da ekliyoruz:

En başında işlerine beraber başlayan çalışanlardan ilki diğerinden 2 kat daha hızlı saydığından dolayı çıktımız şu şekilde görünüyor:

Bu ufak program her ne kadar basit görünse de zaman zaman bizim için çok kullanışlı, çok daha karmaşık işleri yüksek performansla yapabilecek bir araç haline gelebiliyor. Bununla ilgili de yakında farklı yazılar paylaşmayı planlıyorum.

Kolay gelsin :)

--

--

Umutcan Karakaş

İstanbul’da yaşayan bir yazılım geliştiriciyim. Üzerinde çalıştığım konularda ilginizi çekebilecek Türkçe kaynak oluşturmak için yazıyorum.