我想每天早上9点运行Hangfire的定时任务。这是我想要做的:
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
这行代码应该放在哪里?
如果这是一个愚蠢的问题,我很抱歉。
我想每天早上9点运行Hangfire的定时任务。这是我想要做的:
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
这行代码应该放在哪里?
如果这是一个愚蠢的问题,我很抱歉。
.Net Core
,您可以在其中找到文件 startup.cs
。在其中,您可以找到一个 Configure()
方法。在该方法内部,您可以使用那一行代码,紧接着 app.UseHangfireDashboard()
和 app.UseHangfireServer()
,用于配置 Hangfire 仪表板,这是可选的。不要忘记在 startup.cs
中的 ConfigureServices()
方法中注册 Hangfire 服务。ConfigureServices()
内部注册 Hangfire 服务。 public void ConfigureServices(IServiceCollection services)
{
/*
other services
*/
services.AddHangfire(x => x.UseSqlServerStorage("YOUR_HangfireServerConnectionString"));
/*
services.AddMvc()
*/
}
Configure()
方法中设置 Hangfire Cron。public void Configure(IApplicationBuilder app)
{
app.UseHangfireDashboard();
app.UseHangfireServer();
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
}
更多信息请参考链接
更新
cron表达式* 9 * * *
表示该作业将在UTC时间的9点(24小时制)后每分钟触发一次。
如果要每天上午9:00创建一个重复的作业,则表达式应为0 9 * * *
,请参见cron表达式
public void Configuration(IAppBuilder app)
{
app.UseHangfireDashboard();
app.UseHangfireServer();
RecurringJob.AddOrUpdate(19872.ToString(),() => MyMethod(), Cron.Daily(9, 0));
}
builder.Services.AddHangfireServer();
- SamRecurringJob.AddOrUpdate(() => homeCtrl.SendEmail(), Cron.Daily(hour,minute), TimeZoneInfo.Local);
如果没有使用TimeZoneInfo.Local,它将使用默认的UTC时间。您必须始终使用TimeZoneInfo.Local来获取您的精确时间。
var corn = Cron.Daily(); // "0 0 * * *" Every night at 12:00 AM
var corn1 = Cron.Daily(11, 30); // "30 11 * * *"
var corn2 = Cron.Daily(12); // "0 12 * * *"
var corn3 = Cron.Daily(23,55); // "55 23 * * *"
[HttpPost]
[Microsoft.AspNetCore.Mvc.Route("daily")]
public IActionResult AddOrUpdateDailyReportJob([FromBody]JobOptions options)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var result = _clientReportJobCreator.AddOrUpdateDailyClientReport(options.JobId, options.ChronExpression);
return Ok(result);
}
还有一个像这样的服务方法,可以添加或更新现有的循环作业。
public JobCreationResult AddOrUpdateDailyClientReport(string jobId, string chronExpression)
{
try
{
RecurringJob.AddOrUpdate(jobId, () => _clientDailyReportService.Run(), chronExpression);
var result = new JobCreationResult
{
JobId = jobId,
Success = true
};
return result;
}
catch (Exception ex)
{
var result = new JobCreationResult
{
JobId = jobId,
Success = false,
Errors = new List<string>()
{
$"{ex.Message}"
}
};
return result;
}
}
RecurringJob.AddOrUpdate("YOUR_UNIQUE_STRING",() => MyMethod(), "* 9 * * *");
- FarshanRecurringJob.AddOrUpdate(() => MyMethod(), Cron.Daily(9,0));
其中MyMethod()
为需要执行的方法,Cron.Daily(9,0)
表示在每天早上9点钟开始执行该方法。 - Wlad Neto