在 ASP.NET Core 中如果遇到需要一直重複執行的任務,例如每 10 分鐘就將某個資料夾內的所有檔案做處理等背景任務,使用 BackgroundService 可以很簡單的達成。
然後在 Program.cs 中註冊即可:
以「固定間隔時間」的任務來說,BackgroundService 非常簡單好用,並且也不需要安裝套件。但是要做到「固定時間」,例如每天凌晨 1 點 00 分執行這樣的任務就比較麻煩,還不如直接使用第三方套件,例如 Quartz.NET。
參考資料:
Microsoft.Learn - BackgroundService Class
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
感謝教學~
回覆刪除