ASP.NET Core 最簡單後台任務 BackgroundService 示範

在 ASP.NET Core 中如果遇到需要一直重複執行的任務,例如每 10 分鐘就將某個資料夾內的所有檔案做處理等背景任務,使用 BackgroundService 可以很簡單的達成。

    
public class MyBackgroundService : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            var directoryPath = @"C:\MyFiles";
            if (Directory.Exists(directoryPath))
            {
                var files = Directory.GetFiles(directoryPath);
                foreach (var file in files)
                {
                    Console.WriteLine($"處理檔案: {file}");
                }
            }

            await Task.Delay(TimeSpan.FromMinutes(10), stoppingToken);
        }
    }
}
    

然後在 Program.cs 中註冊即可:
    
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddHostedService<MyBackgroundService>();

var app = builder.Build();
    

以「固定間隔時間」的任務來說,BackgroundService 非常簡單好用,並且也不需要安裝套件。但是要做到「固定時間」,例如每天凌晨 1 點 00 分執行這樣的任務就比較麻煩,還不如直接使用第三方套件,例如 Quartz.NET

參考資料:
Microsoft.Learn - BackgroundService Class

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com