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

时间:2014-06-09 14:23:20

标签: c# asp.net .net asp.net-mvc backgroundworker

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

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

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

主要解决方案如下:

  1. Using Cache and its CacheItemRemovedCallback method;
  2. Using BackgroundWorker;
  3. Simple use of Thread in global.asax's Application_Start method;
  4. Using of IRegisteredObject
  5. 所以问题是:在ASP.NET中实现后台进程的最佳方法是什么?

    P.S。我知道更好的解决方案是将在Scheduller中运行的Windows服务或控制台应用程序。但我想在ASP.NET中使用它。

    修改

    我使用CodeFirst:

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

1 个答案:

答案 0 :(得分:1)

这听起来像是一个更适合调度程序的任务。 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的documentation页面上有很多例子。