我正在开发一个asp.net mvc core 2应用程序。
我想在我的应用程序的后台运行一种cron任务,每10分钟启动一次。 我已经编写了一个控制台应用程序来执行此操作,但我想知道是否有办法将此代码直接放在asp.net mvc核心项目中(Startup.cs?)
答案 0 :(得分:0)
它应该与控制台应用程序相同。 asp.net核心应用程序中有一个main
函数。此外,您可以将它放在StartUp.cs。
唯一的问题是,例如,如果您在IIS中托管应用程序。通常在有时没有传入请求之后,您的应用程序将被置于睡眠模式(被杀死),您的后台任务也是如此。所以你需要仔细核实。
答案 1 :(得分:0)
在ASP Core中,您使用<button onclick="toggleMethod()">ToggleMe</button>
请参阅: Implement background tasks in microservices with IHostedService and the BackgroundService class
答案 2 :(得分:0)
在Startup.cs中添加一些内容是一种可行的方法。
您可以像这样实现自己的工作:
public class YourCronService: IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
Task.Run(TaskRoutine, cancellationToken);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("Sync Task stopped");
return null;
}
public Task TaskRoutine()
{
while (true)
{
//Do what ever you want to do all 10 Minutes
//Wait 10 minutes till next execution
DateTime nextStop = DateTime.Now.AddMinutes(10);
var timeToWait = nextStop - DateTime.Now;
var millisToWait = timeToWait.TotalMilliseconds;
Thread.Sleep((int)millisToWait);
}
}
}
实施服务后,只需将以下代码行添加到Startup.cs
方法的ConfigureServices
中:
services.AddSingleton<IHostedService, YourCronService>();
如果您以此方式进行操作,则应仔细检查服务器是否“始终处于打开状态”。如果您的服务器处于待机模式,则不会执行该作业。一个很好的例子是Auzure Web App。如果一段时间未使用您的网络应用程序,除非您启用“始终在线”功能,否则它将一直设置为待机模式直到下一个请求。
答案 3 :(得分:0)
我已经可以在MVC Core中使用HangFire做到这一点。
我添加了Nuget软件包: Hangfire.AspNetCode,HangFire.Console和HangFire.SqlServer
配置服务:
services.AddHangfire(x => x.UseSqlServerStorage(connectionForHangFire));
配置:
app.UseHangfireDashboard();
app.UseHangfireServer();