在ASP中创建后台进程.净MVC

本文关键字:MVC 后台进程 创建 ASP | 更新日期: 2023-09-27 18:07:35

我有一些数据,只有当它的过期日期(在创建数据时设置)大于今天,或者它的状态是Closed(状态可以由用户随时更改)时才能显示。因此,当数据过期时,其状态应自动设置为Closed

在这种情况下,我想创建一些后台任务,每天检查一次数据(这是问题,因为通常主机设置应用程序池空闲超时20分钟),并设置状态,如果数据过期

我读了一些关于如何实现我想要的东西的文章。但是,我不知道什么是最好的方法。

主要解决方案如下:

  1. 使用Cache及其CacheItemRemovedCallback法;
  2. 使用BackgroundWorker;
  3. Thread在全局的简单使用。asax的Application_Start方法;
  4. IRegisteredObject .
所以问题是:在ASP.NET中实现后台进程的最佳方式是什么?

注:我知道更好的解决方案将是Windows服务或控制台应用程序,将在调度程序中运行。但我想在ASP.NET中实现。

编辑:

我使用CodeFirst:

public class Theme
{
    //...
    [Required]
    public DateTime FinishTime { get; set; } }
    public Status? Status { get; set; }
}

在ASP中创建后台进程.净MVC

这听起来像是一个更适合调度器的任务。Quartz可以做你想做的事情,并且在这种情况下配置起来非常简单:

public class MyJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        // Find and update data here
    }
}
// define the job and tie it to our MyJobclass
IJobDetail job = JobBuilder.Create<MyJob>()
    .WithIdentity("myJob")
    .Build();
// Trigger the job to run at midnight every day
ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger")
    .StartAt(DateBuilder.AtHourOfDay(0))
    .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
    .Build();
// Tell quartz to schedule the job using our trigger
scheduler.ScheduleJob(job, trigger);

Quartz的文档页面上有很多例子