当我们需要在我们的Web应用中调度任务时,定时任务是一种非常重要的工具。在AspNet Core中,我们可以使用第三方库如Hangfire或Quartz等来实现定时任务。让我们更加详细地了解如何在AspNet Core中实现web定时任务。
第一步: 添加Hangfire参考
在AspNet Core Web应用中启用Hangfire定时任务,首先需要将Hangfire Nuget包添加到项目中。 添加的NuGet包是Hangfire.AspNetCore。 可以通过Nuget包管理器或通过项目的package.json文件进行操作。在package.json文件中添加以下代码行,然后让Visual Studio还原包即可:
"dependencies": {
"Hangfire.AspNetCore": "1.7.12"
}
第二步: 配置Hangfire
安装Hangfire之后,需要对其进行配置,以便在Web应用程序启动时启动Hangfire服务。为此,需要在Startup.cs类中添加以下代码:
public void ConfigureServices(IServiceCollection services)
{
// 添加Hangfire服务
services.AddHangfire(x => x.UseSqlServerStorage(Configuration.GetConnectionString("hangfireConnection")));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
// 启用Hangfire服务器
app.UseHangfireServer();
// 启用Hangfire仪表板
app.UseHangfireDashboard();
// 其他AspNet Core配置...
}
在上面的代码中,我们在ConfigureServices方法中添加了Hangfire服务,并使用连接字符串“hangfireConnection”配置了用于存储Hangfire数据的SqlServer数据库。还在Configure方法中启用Hangfire服务器并启用Hangfire仪表板。现在Web应用程序可以使用Hangfired进行任务调度。
第三步: 创建定时任务
在AspNet Core中创建定时任务需要依靠Hangfire,因此我们需要创建一个包含定时任务定义的静态类。定义一个静态函数,该函数带有标注的[Queue]特性。这个特性可以指定任务调度器对该任务使用的队列名称。在这个函数中,你可以调用任何你想执行的代码段。
using Hangfire;
public static class MyBackgroundTasks
{
[Queue("test_queue")]
public static void SendWelcomeEmail(int userId)
{
// 发送欢迎邮件给新注册的用户
Console.WriteLine("欢迎邮件已发送给用户 " + userId);
}
}
上面的代码定义了一个名为SendWelcomeEmail的静态函数,带有一个参数userId。这个任务会把欢迎邮件发送给新注册的用户。该函数通过使用标注的[Queue]特性将该任务指派给“test_queue”队列。
第四步: 使用定时任务
现在数据可以存储在Hangfire数据库中了,将Hangfire发回的ID用于跟踪该作业的执行情况。我们将使用Hangfire的API调用定时任务,以便在特定的时间或时间间隔内执行任务。
在Web应用程序中使用定时任务, 我们可以使用Hangfire的槽机制来添加、删除或更新BackGround任务。示例如下:
BackgroundJob.Enqueue(() => MyBackgroundTasks.SendWelcomeEmail(userId));
上面的代码使用Hangfire系统在创建基于队列的作业,将任务放入“test_queue”队列中,异步地执行SendWelcomeEmail任务。
我们也可以使用Hangfire来添加或删除反复出现的任务,下面的代码演示了在每小时上扫描webserver的日志文件示例:
//用Cron表达式开启定时任务
RecurringJob.AddOrUpdate(() => MyBackgroundTasks.ScanServerLogs(), Cron.Hourly);
上面的代码将任务ScanServerLogs添加为计划作业,并使用Cron表达式在每小时执行一次。
到此,我们已经讲解了在AspNet Core上实现web定时任务的攻略。我们通过配置、定义和使用Hangfire在AspNet Corewith定时任务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:AspNet Core上实现web定时任务实例 - Python技术站