Asp.net mvc 4 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)

我在ASP.NETMVC4WebApplication中使用了Quartz.NET来启动长时间运行的任务。长时间运行的任务应该在POST之后在控制器方法内启动,而不是在应用程序启动时启动。我的代码工作得很好,但前提是没有其他任务正在运行,否则正在运行的任务将停止。如何使用同一IJob实现的类同时运行多个任务?Quartz.NET是该用例的正确框架吗

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();