在ASP中创建后台进程.净MVC
本文关键字:MVC 后台进程 创建 ASP | 更新日期: 2023-09-27 18:07:35
我有一些数据,只有当它的过期日期(在创建数据时设置)大于今天,或者它的状态是Closed
(状态可以由用户随时更改)时才能显示。因此,当数据过期时,其状态应自动设置为Closed
。
在这种情况下,我想创建一些后台任务,每天检查一次数据(这是问题,因为通常主机设置应用程序池空闲超时20分钟),并设置状态,如果数据过期
我读了一些关于如何实现我想要的东西的文章。但是,我不知道什么是最好的方法。
主要解决方案如下:
- 使用
Cache
及其CacheItemRemovedCallback
法; - 使用
BackgroundWorker
; -
Thread
在全局的简单使用。asax的Application_Start
方法; -
IRegisteredObject
.
注:我知道更好的解决方案将是Windows服务或控制台应用程序,将在调度程序中运行。但我想在ASP.NET中实现。
编辑:我使用CodeFirst:
public class Theme
{
//...
[Required]
public DateTime FinishTime { get; set; } }
public Status? Status { get; set; }
}
这听起来像是一个更适合调度器的任务。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的文档页面上有很多例子