M E D Y A T Ö R

Arka Planda Güçlü Çalışma: .NET Core MVC ile BackgroundService Kullanımı

20

KASIM

2024


Görüntülenme

İnternet dünyasında hız ve performans, her şeyden daha önemli. Her an çalışan bir uygulama hayal edin. Kullanıcıların fark etmediği ancak çok önemli işlemler arka planda devam ediyor.

Cr: youtube/@Tech Buddy/ .Net Core BackgroundService |
IHostedService

Nedir Bu BackgroundService?

BackgroundService, .NET Core’un sunduğu harika bir özellik. Uygulamanın ana işleyişi devam ederken, zaman alıcı veya sürekli çalışması gereken görevlerin arka planda çalışmasını sağlar. Yani, veritabanı bakımı, e-posta gönderimi, raporlama işlemleri gibi işler için mükemmel bir çözüm.

Mesela, bir e-ticaret sitesinde sipariş onayları veya müşteri e-postaları göndermek için sürekli çalışan bir arka plan servisi oluşturabilirsiniz. Tüm bu işlemler, kullanıcının siteyi kullanırken herhangi bir kesintiye neden olmadan gerçekleşir.

Cr: youtube/@Tech Buddy/ .Net Core BackgroundService |
IHostedService

BackgroundService Kullanımı

 Servisi Oluşturma

İlk adım, yeni bir arka plan servisi oluşturmaktır. Bunun için BackgroundService sınıfını kullanacağız. Aşağıdaki örnekte, basit bir arka plan görevini başlatıyoruz:

 using Microsoft.Extensions.Hosting;
        using System.Threading;
        using System.Threading.Tasks;
       
        public class BackgroundTask : BackgroundService
        {
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    // Burada yapılacak işlemi tanımlıyoruz
                    await Task.Delay(1000, stoppingToken); // 1 saniyelik bir gecikme
                }
            }
        }

Burada ExecuteAsync metodu, servisin çalışacağı yerdir. CancellationToken sayesinde işlemi istediğiniz zaman durdurabilirsiniz.

       2. Startup.cs’ye Ekleme

BackgroundService’i aktif hale getirmek için Startup.cs dosyasına ekleme yapmamız gerekiyor. Servisi DI (Dependency Injection) konteynerine kaydederek başlatıyoruz.

  public void ConfigureServices(IServiceCollection services)
{
    services.AddHostedService<BackgroundTask>(); // BackgroundService’i burada ekliyoruz
}

Bu sayede, uygulamanız çalışırken arka planda görevleriniz de aktif olacaktır.

      3. Gerçek Hayattan Örnek: E-Posta Gönderme

E-ticaret uygulamalarında sıkça karşılaşılan bir işlem, sipariş onayı veya kullanıcılara bildirim e-postaları göndermektir. İşte bu işlemi arka planda nasıl yapabileceğimizi gösteren bir örnek:

public class EmailNotificationService : BackgroundService
        {
            private readonly IEmailSender _emailSender;
       
            public EmailNotificationService(IEmailSender emailSender)
            {
                _emailSender = emailSender;
            }
       
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    var pendingEmails = GetPendingEmails(); // Önceden oluşturulmuş e-posta listesi
       
                    foreach (var email in pendingEmails)
                    {
                        await _emailSender.SendEmailAsync(email);
                    }
       
                    await Task.Delay(60000, stoppingToken); // Her 1 dakikada bir kontrol et
                }
            }
       
            private List<string> GetPendingEmails()
            {
                // Burada, e-posta gönderilmesi gereken kullanıcıların listesini alıyoruz
                return new List<string> { "user1@example.com", "user2@example.com" };
            }
        }

Burada, EmailNotificationService sınıfı her dakika kullanıcıların e-posta bildirimlerini gönderiyor. Bu, kullanıcıların web sitesi ile etkileşimde olmasalar bile arka planda sürekli çalışan bir görevle gerçekleştiriliyor.

Cr: youtube/@Tech Buddy/ .Net Core BackgroundService |
IHostedService

Arka Plan Görevlerini Yönetmek

Arka planda çalışan görevleri yönetmek, oldukça önemlidir. Bazen sisteminize zarar vermemek için bu görevlerin düzgün bir şekilde durdurulması gerekebilir. CancellationToken ile görevlerinizi iptal edebilir veya zamanlayıcılarla arka plan görevlerini zamanlayabilirsiniz.

Mesela, veritabanı yedekleme işlemi yapmak istiyorsanız, işlemi arka planda güvenli bir şekilde durdurmak için bir örnek;

Cr: youtube/@Tech Buddy/ .Net Core BackgroundService |
IHostedService

       protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        BackupDatabase(); // Veritabanını yedekleme işlemi
        await Task.Delay(3600000, stoppingToken); // Her saat başı
    }
}

Neden BackgroundService Kullanmalısınız?

Performans Artışı: Zaman alıcı işlemler ana işleyişi engellemez. Kullanıcılar web sitenizi kullanırken, arka planda işler yavaşça yapılır.

Karmaşık Görevler: E-posta gönderimi, veri senkronizasyonu, raporlama gibi işlemler için idealdir.

Veri Sürekliliği: Arka plan görevleri sayesinde, kesintisiz bir hizmet sunarak kullanıcıların daima güncel verilere erişmesini sağlayabilirsiniz.

.NET Core MVC’de BackgroundService kullanmak, uygulamanızın daha hızlı ve verimli çalışmasını sağlayacak önemli bir adımdır. Kullanıcılarınızın fark etmediği ancak sürekli çalışan işlemler sayesinde, uygulamanız hem daha sağlam hem de kullanıcı dostu hale gelir.



Cr: youtube/@Tech Buddy/ .Net Core BackgroundService | IHostedService

(https://www.youtube.com/watch?v=vf4W9olwDoc)