使用asp.net mvc core运行后台任务

时间:2017-12-17 07:10:53

标签: asp.net asp.net-core asp.net-core-mvc background-task

我正在开发一个asp.net mvc core 2应用程序。

我想在我的应用程序的后台运行一种cron任务,每10分钟启动一次。 我已经编写了一个控制台应用程序来执行此操作,但我想知道是否有办法将此代码直接放在asp.net mvc核心项目中(Startup.cs?)

4 个答案:

答案 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做到这一点。

Hangfire

我添加了Nuget软件包: Hangfire.AspNetCode,HangFire.Console和HangFire.SqlServer

配置服务:

services.AddHangfire(x => x.UseSqlServerStorage(connectionForHangFire));

配置:

app.UseHangfireDashboard();
app.UseHangfireServer();