我有一些数据只有在其到期日期(数据创建时设置)大于今天且状态为Closed
时才能显示(用户可随时更改状态) 。因此,当数据过期时,其状态应自动设置为Closed
。
在这种情况下,我想创建一些后台任务,每天检查一次数据(这是问题,因为通常托管服务商将应用程序池空闲超时设置为20分钟)并设置数据状态过期。
我读了一些如何实现我想要的文章。但是,我不知道最好的方法是什么。
主要解决方案如下:
Cache
and its CacheItemRemovedCallback
method; BackgroundWorker
; Thread
in global.asax's Application_Start
method; IRegisteredObject
。所以问题是:在ASP.NET中实现后台进程的最佳方法是什么?
P.S。我知道更好的解决方案是将在Scheduller中运行的Windows服务或控制台应用程序。但我想在ASP.NET中使用它。
修改
我使用CodeFirst:
public class Theme
{
//...
[Required]
public DateTime FinishTime { get; set; } }
public Status? Status { get; set; }
}
答案 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页面上有很多例子。