最近接到一個新項目,需要在項目里添加一個後臺任務,定時去發郵件通知客戶;由於是一個比較小型的項目,不希望引入Quartz.Net、Hangfire等太重的框架,同時也沒持久化要;尋覓了一下發現ASP.NET Core本身帶有托管服務,可以執行定時任務。ASP.NET Core提供了IHostedSe ...
最近接到一個新項目,需要在項目里添加一個後臺任務,定時去發郵件通知客戶;由於是一個比較小型的項目,不希望引入Quartz.Net、Hangfire等太重的框架,同時也沒持久化要;尋覓了一下發現ASP.NET Core本身帶有托管服務,可以執行定時任務。ASP.NET Core提供了IHostedService介面,它使我們能夠創建後臺任務併在應用程式的生命周期中管理這些任務。使用IHostedService介面,我們可以實現在指定時間間隔內重覆執行的定時任務。本文將介紹如何使用IHostedService介面實現定時任務
使用步驟
1、實現IHostedService任務介面
首先,我們需要創建一個類來實現IHostedService介面。這個類將包含我們要執行的定時任務的邏輯。下麵是一個簡單的示例:
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("開始任務執行!!");
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("任務執行中:"+ dt.ToString()+ "!!");
}
public Task StopAsync(CancellationToken cancellationToken)
{
timer?.Change(Timeout.Infinite, 0);
_logs.LogInformation("任務執行結束!");
return Task.CompletedTask;
}
public void Dispose()
{
timer?.Dispose();
}
}
//歡迎關註公眾號:DOTNET開發跳槽,領取海量面試題。加微信號xbhpnet入群交流
簡而言之,這是一個自定義服務,使用定時器每 30 秒執行一次任務。它實現了 IHostedService 和 IDisposable 介面,並使用依賴註入 ILogger
2、註冊組件
使用定時任務需要將其註冊到ASP.NET Core應用程式中,並根據需求。在Program.cs中,添加以下代碼:
builder.Services.AddHostedService<MyTaskService>();
3、執行效果
以上代碼全部寫完了,不需要引用任何包,很簡單吧。執行效果如下:
結語
本文提供了一個簡單的示例來演示如何使用IHostedService實現定時任務,並將其註冊到ASP.NET Core應用程式中。大家可以根據自己使用場景來配置相應生命周期的時間間隔的定時任務。它的優點是輕量級別,使用簡單;但是比較複雜的和批量的定時任務還是建議使用第三方定時任務組件,比如hangfire等主流工具。是不是很簡單?希望本文對你有所收穫。
來源公眾號:DOTNET開發跳槽