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;34public class EmailBackgroundService: BackgroundService5{6private readonly ILogger<EmailBackgroundService> _logger;78public EmailBackgroundService(ILogger<EmailBackgroundService> logger)9{10_logger = logger;11}1213protected override async Task ExecuteAsync(CancellationToken stoppingToken)14{15while (!stoppingToken.IsCancellationRequested)16{17_logger.LogInformation("Email işi başladı: {time}", DateTime.Now);1819// Burada email gönderme işi yapılır20await Task.Delay(5000, stoppingToken); // Her 5 saniyede bir2122_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);23// BackgroundService'i ekle4builder.Services.AddHostedService<EmailBackgroundService>();56var app = builder.Build();7app.Run();Gerçek bir örnek: Her dakika eski logları sil.
1public class LogCleanupService: BackgroundService2{3private readonly ILogger<LogCleanupService> _logger;45public LogCleanupService(ILogger<LogCleanupService> logger)6{7_logger = logger;8}910protected override async Task ExecuteAsync(CancellationToken stoppingToken)11{12while (!stoppingToken.IsCancellationRequested)13{14try15{16_logger.LogInformation("Eski loglar siliniyor...");1718// 7 günden eski dosyaları sil19var 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}2930// 1 dakika bekle31await 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.txt3İ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.
0 yorum