目的
在windows系統上想執行排程有兩個選擇
- 使用windows工作排程器執行exe檔
- 透過Hangfire進行排程管理
此次教學說明如何使用Hangfire執行排程
建立新專案
選擇ASP.NET Core Web API專案範本,並執行下一步
設定新的專案
命名你的專案名稱,並選擇專案要存放的位置。
其他資訊
直接進行下一步
NuGet加入套件
- Hangfire
- Hangfire.InMemory
編輯Program.cs檔
using Hangfire;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//註冊hangfire並且使用記憶體保存排程,
//預設所下載的HangFire套件可以使用sqlserver,可透過config.UseSqlServerStorage();,但需要設定
builder.Services.AddHangfire(config => {
config.UseInMemoryStorage();
});
//註冊hangfire要使用的伺服器,伺服器就是上面所寫的使用記憶體當伺服器
builder.Services.AddHangfireServer();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) {
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
//使用hangfire內建的儀表板
app.UseHangfireDashboard();
app.MapControllers();
app.Run();
編輯WeatherForecastController.cs類別檔
//記得using Hangfire;
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get() {
//單次立即執行
BackgroundJob.Enqueue(() => Console.WriteLine("單次!"));
//單次10秒後執行
BackgroundJob.Schedule(() => Console.WriteLine("10秒後執行!"), TimeSpan.FromSeconds(10));
//重複執行,預設為每天00:00啟動
RecurringJob.AddOrUpdate(() => Console.WriteLine("重複執行!"), Cron.Daily);
return Enumerable.Range(1, 5).Select(index => new WeatherForecast {
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
執行結果
F5執行後,依照下列步驟操作,並確認結果 接下來到hangfire儀表板查看執行狀態
預設的網址為https://domain/hangfire 我的swagger網址為 https://localhost:7198/swagger/index.html 所以下方為hangfire預設路徑 https://localhost:7198/hangfire
就可以看到Hangfire的畫面了,接著點擊上方工作
就可以看到所執行的排程,如需看重複作業則點選定期工作
後記
任務排程的套件還有另外兩個Coravel與Quart.Net都可以參考看看