ASP.NET Core使用Hangfire實現(xiàn)定時任務(wù)
前言
也是上了5天班,終于迎來了休息,抽空更新下博客,然后就是下周一公司會對我進(jìn)行考核,希望考核能通過吧?。?!
然后我想給博客添加一個定時發(fā)布文章的功能,其實這個功能對于我的博客是沒什么作用的,什么時候發(fā)都沒什么人看。但是咱還是要有這個功能。
實現(xiàn)思路
我為文章表添加了一個Status狀態(tài)屬性,然后如果在上傳文章的時候,添加了定時參數(shù),那么就會進(jìn)入定時任務(wù)的方法。首先無論是否選擇定時發(fā)布,文章都會保存到數(shù)據(jù)庫。Status狀態(tài)默認(rèn)為1,如果是定時發(fā)布文章的話,Status狀態(tài)為0,當(dāng)?shù)竭_(dá)定時時間后將會執(zhí)行定時任務(wù),修改Status屬性為發(fā)布也就是1。
實現(xiàn)步驟
第一步:安裝Hangfire包
dotnet add package Hangfire
dotnet add package Hangfire.MemoryStorage //根據(jù)需求導(dǎo)入
第二步:配置服務(wù)
在配置文件中配置Hangfire
// 添加Hangfire服務(wù)
builder.Services.AddHangfire(configuration => configuration.UseMemoryStorage());
// 添加定時任務(wù)
builder.Services.AddHangfireServer();
// 使用Hangfire中間件
app.UseHangfireDashboard();
注意我這里是直接使用的內(nèi)存UseMemoryStorage
作為Hangfire的存儲方式,這個項目還提供了很多比如SQLServer,Redis等,那么對應(yīng)的Nuget包也不同,自行參考官方文檔,鏈接在本文底部。
第三步:調(diào)度后臺任務(wù)
首先是修改狀態(tài)的代碼
public void UpdateStatus(string id)
{
var post = _myDbContext.posts.FirstOrDefault(p => p.Id == id);
if (post != null)
{
post.Status = 1;
_myDbContext.SaveChanges();
}
}
Hangfire調(diào)用后臺任務(wù)的方法是BackgroundJob.Schedule(),里面需要2個參數(shù),分別是需要定時執(zhí)行的方法和延遲任務(wù)執(zhí)行的時間。
...上方邏輯代碼,無需展示
if (publishTime.HasValue && publishTime.Value > DateTime.Now)
{
// 計算延遲時間
var delay = publishTime.Value - DateTime.Now;
post.Status = 0;//未發(fā)布
// 使用Hangfire調(diào)度后臺任務(wù)
BackgroundJob.Schedule( () => UpdateStatus(post.Id) ,delay);
}
else
{
post.Status = 1; //發(fā)布
}
// 存入數(shù)據(jù)庫
await _myDbContext.SaveChangesAsync();
實現(xiàn)效果
首先發(fā)送請求,可以看到啟動了定時任務(wù)
然后查詢數(shù)據(jù)庫,可以看到Status為0。
然后在08分的時候,Status變成了1,也就是發(fā)布
然后也是可以看到執(zhí)行了Update語句
管理后臺也是加了個狀態(tài)欄文章來源:http://www.zghlxwxcb.cn/news/detail-711581.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-711581.html
參考資料
- HangfireIO/Hangfire:一種在.NET和.NET Core應(yīng)用程序中執(zhí)行后臺作業(yè)處理的簡單方法。無需 Windows 服務(wù)或單獨的進(jìn)程 (github.com) https://github.com/HangfireIO/Hangfire
到了這里,關(guān)于ASP.NET Core使用Hangfire定時發(fā)布文章的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!