Asp.net mvc 4 NET运行多个任务
我在ASP.NETMVC4WebApplication中使用了Quartz.NET来启动长时间运行的任务。长时间运行的任务应该在POST之后在控制器方法内启动,而不是在应用程序启动时启动。我的代码工作得很好,但前提是没有其他任务正在运行,否则正在运行的任务将停止。如何使用同一IJob实现的类同时运行多个任务?Quartz.NET是该用例的正确框架吗Asp.net mvc 4 NET运行多个任务,asp.net-mvc-4,quartz.net,Asp.net Mvc 4,Quartz.net,我在ASP.NETMVC4WebApplication中使用了Quartz.NET来启动长时间运行的任务。长时间运行的任务应该在POST之后在控制器方法内启动,而不是在应用程序启动时启动。我的代码工作得很好,但前提是没有其他任务正在运行,否则正在运行的任务将停止。如何使用同一IJob实现的类同时运行多个任务?Quartz.NET是该用例的正确框架吗 public async Task<ActionResult> Processfile(HttpPostedFileBase file)
public async Task<ActionResult> Processfile(HttpPostedFileBase file) {
var groupName = "Group";
var jobId = "processJob" + Guid.NewGuid();
// defines the job
IJobDetail job = JobBuilder.Create<ProcessJob>()
.WithIdentity(jobId, groupName)
.UsingJobData(parameters)
.Build();
// defines the trigger
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("processTrigger" + Guid.NewGuid(), groupName)
.WithPriority(1)
.StartNow()
.Build();
// Tell quartz to schedule the job using our trigger
await scheduler.ScheduleJob(job, trigger);
await scheduler.Start();
return new HttpStatusCodeResult(HttpStatusCode.OK, "OK");
}计划程序应在后台运行。理想情况下,您可以运行服务器进程,并在需要时在那里添加作业。根据您的设置,在ASP.NET应用程序中运行调度程序可能会有问题 看到你的代码,scheduler.Start看起来很奇怪。你调用 等待调度程序。启动; 每一次。 而是尝试在定义了调度程序的位置启动作业
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
然后构建作业和触发器,并调用wait scheduler.ScheduleJobjob,trigger;
这样就可以解决问题。要运行多个作业,可以声明IJobDetail类的多个实例和相应的ITrigger对象 比如说,
IJobDetail job = JobBuilder.Create<Class1>.Build();
IJobDetail job2 = JobBuilder.Create<Class2>.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(1)
.RepeatForever())
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger2", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(1)
.RepeatForever())
.Build();
然后启动调度程序
scheduler.Start();
或者,使用Dictionary的方法-请参阅以了解另一种方法
scheduler.Start();