我正在尝试每天早上9点运行篝火重复工作。这就是我想要做的事情 -
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
我应该把这行代码放在哪里?
对不起,如果这是一个愚蠢的问题。
答案 0 :(得分:4)
假设您使用的是.Net Core
,您可以在其中找到文件startup.cs
。在那里你可以找到Configure()
方法。在方法内部,您可以在app.UseHangfireDashboard()
和app.UseHangfireServer()
之后使用该行,用于配置hangfire仪表板,这是可选的。不要忘记ConfigureServices()
方法中的注册Hangfire服务,这可以在startup.cs
本身找到。
您可以在 Startup.cs
中的ConfigureServices()
内注册Hangfire服务
public void ConfigureServices(IServiceCollection services)
{
/*
other services
*/
services.AddHangfire(x => x.UseSqlServerStorage("YOUR_HangfireServerConnectionString"));
/*
services.AddMvc()
*/
}
您可以在 Startup.cs
中的Configure()
内设置Hangfire Cron
public void Configure(IApplicationBuilder app)
{
app.UseHangfireDashboard();
app.UseHangfireServer();
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");
}
了解更多信息,请参阅link
<强>更新强>
cron表达式* 9 * * *
表示作业将在系统时间 UTC时间的9(24小时格式)后每分钟触发一次。
要在每日上午9点创建定期作业,表达式应为0 9 * * *
,请参阅此处cron expressions
答案 1 :(得分:0)
我使用web api端点创建作业。我总是给定期工作一个像guid那样的唯一标识符。这样,如果我需要编辑定期作业chron表达式,并可以通过我的web api端点更新它。
所以在网络上我有: -
[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;
}
}
答案 2 :(得分:0)
在asp.net中,您可以通过此nugetpackage将Microsoft.Owin中间件和OwinStartup添加到您的项目中,然后使用startup.cs来设置hangfire。对于hangfire定期作业,我们始终使用Startup.cs文件的Configuration方法:
public void Configuration(IAppBuilder app)
{
app.UseHangfireDashboard();
app.UseHangfireServer();
RecurringJob.AddOrUpdate(19872.ToString(),() => MyMethod(), Cron.Daily(9, 0));
}