BackgroundService: ASP.NET Core'da Uzun Süren İşleri Yönetmek

# BackgroundService: ASP.NET Core'da Uzun Süren İşleri Yönetmek

ASP.NET Core'da web isteğini bekletmeden arka planda çalışan işleri yönetmek gerekir. Email gönderme, rapor üretme, veritabanı temizliği gibi işler kullanıcıyı bekletmemelidir. bu yüzden `BackgroundService` kullanırız.

BackgroundService'ten kalıtım alan bir sınıf yaz:

1using Microsoft.Extensions.Hosting;
2using Microsoft.Extensions.Logging;
3
4public class EmailBackgroundService: BackgroundService
5{
6private readonly ILogger<EmailBackgroundService> _logger;
7
8public EmailBackgroundService(ILogger<EmailBackgroundService> logger)
9{
10_logger = logger;
11}
12
13protected override async Task ExecuteAsync(CancellationToken stoppingToken)
14{
15while (!stoppingToken.IsCancellationRequested)
16{
17_logger.LogInformation("Email işi başladı: {time}", DateTime.Now);
18
19// Burada email gönderme işi yapılır
20await Task.Delay(5000, stoppingToken); // Her 5 saniyede bir
21
22_logger.LogInformation("Email işi bitti: {time}", DateTime.Now);
23}
24}
25}

Startup dosyasında servisi kaydet:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1var builder = WebApplication.CreateBuilder(args);
2
3// BackgroundService'i ekle
4builder.Services.AddHostedService<EmailBackgroundService>();
5
6var app = builder.Build();
7app.Run();

Gerçek bir örnek: Her dakika eski logları sil.

1public class LogCleanupService: BackgroundService
2{
3private readonly ILogger<LogCleanupService> _logger;
4
5public LogCleanupService(ILogger<LogCleanupService> logger)
6{
7_logger = logger;
8}
9
10protected override async Task ExecuteAsync(CancellationToken stoppingToken)
11{
12while (!stoppingToken.IsCancellationRequested)
13{
14try
15{
16_logger.LogInformation("Eski loglar siliniyor...");
17
18// 7 günden eski dosyaları sil
19var logFiles = Directory.GetFiles("logs");
20foreach (var file in logFiles)
21{
22var fileInfo = new FileInfo(file);
23if (DateTime.Now - fileInfo.CreationTime > TimeSpan.FromDays(7))
24{
25File.Delete(file);
26_logger.LogInformation("Silindi: {file}", file);
27}
28}
29
30// 1 dakika bekle
31await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
32}
33catch (Exception ex)
34{
35_logger.LogError(ex, "Hata oluştu");
36}
37}
38}
39}

Çıktı:

1İnformation: LogCleanupService - Eski loglar siliniyor...
2İnformation: LogCleanupService - Silindi: logs/log-2024-01-01.txt
3İnformation: LogCleanupService - 1 dakika sonra tekrar çalışacak

- `ExecuteAsync()` içinde sonsuz döngü (`while`) kulanırız
- `stoppingToken` ile uygulama kapanışında işi durdururuz
- `Task.Delay()` ile bekletme süresi ayarlanır
- Hata olabilir, `try-catch` kullan
- Loglama yap, sorun çıktığında bulman kolay olur

BackgroundService, uygulamaya arka planda çalışan işler eklemenin en basit yoludur.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz