最近接到一個新項目,需要在項目里添加一個后臺任務(wù),定時去發(fā)郵件通知客戶;由于是一個比較小型的項目,不希望引入Quartz.Net、Hangfire等太重的框架,同時也沒持久化要;尋覓了一下發(fā)現(xiàn)ASP.NET Core本身帶有托管服務(wù),可以執(zhí)行定時任務(wù)。ASP.NET Core提供了IHostedService接口,它使我們能夠創(chuàng)建后臺任務(wù)并在應(yīng)用程序的生命周期中管理這些任務(wù)。使用IHostedService接口,我們可以實現(xiàn)在指定時間間隔內(nèi)重復(fù)執(zhí)行的定時任務(wù)。本文將介紹如何使用IHostedService接口實現(xiàn)定時任務(wù)
使用步驟
1、實現(xiàn)IHostedService任務(wù)接口
首先,我們需要創(chuàng)建一個類來實現(xiàn)IHostedService接口。這個類將包含我們要執(zhí)行的定時任務(wù)的邏輯。下面是一個簡單的示例:
public?class?MyTaskService?:?IHostedService,?IDisposable
{
private readonly ILogger<MyTaskService> _logs;
private Timer timer;
public MyTaskService(ILogger<MyTaskService> logger)
{
this._logs=logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logs.LogInformation("開始任務(wù)執(zhí)行?。?);
timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
????????????return?Task.CompletedTask;
}
public void DoWork(object state)
{
string dt = DateTime.Now.ToString();
_logs.LogInformation("任務(wù)執(zhí)行中:"+ dt.ToString()+ "?。?);
}
public Task StopAsync(CancellationToken cancellationToken)
{
timer?.Change(Timeout.Infinite, 0);
_logs.LogInformation("任務(wù)執(zhí)行結(jié)束!");
return Task.CompletedTask;
}
public void Dispose()
{
timer?.Dispose();
}
}
??//歡迎關(guān)注公眾號:DOTNET開發(fā)跳槽,領(lǐng)取海量面試題。加微信號xbhpnet入群交流
簡而言之,這是一個自定義服務(wù),使用定時器每 30 秒執(zhí)行一次任務(wù)。它實現(xiàn)了 IHostedService 和 IDisposable 接口,并使用依賴注入 ILogger
2、注冊組件
使用定時任務(wù)需要將其注冊到ASP.NET Core應(yīng)用程序中,并根據(jù)需求。在Program.cs中,添加以下代碼:
builder.Services.AddHostedService<MyTaskService>();
3、執(zhí)行效果
以上代碼全部寫完了,不需要引用任何包,很簡單吧。執(zhí)行效果如下:
結(jié)語文章來源:http://www.zghlxwxcb.cn/news/detail-455941.html
本文提供了一個簡單的示例來演示如何使用IHostedService實現(xiàn)定時任務(wù),并將其注冊到ASP.NET Core應(yīng)用程序中。大家可以根據(jù)自己使用場景來配置相應(yīng)生命周期的時間間隔的定時任務(wù)。它的優(yōu)點是輕量級別,使用簡單;但是比較復(fù)雜的和批量的定時任務(wù)還是建議使用第三方定時任務(wù)組件,比如hangfire等主流工具。是不是很簡單?希望本文對你有所收獲。文章來源地址http://www.zghlxwxcb.cn/news/detail-455941.html
來源公眾號:DOTNET開發(fā)跳槽
到了這里,關(guān)于2步輕松實現(xiàn)ASP.NET Core托管服務(wù)執(zhí)行定時任務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!