首页 > 解决方案 > 调用现有控制器操作方法的作业执行

问题描述

我有两种操作方法DayStart()DayEnd()我必须DayStart() 在上午 8:05(周一至周五)和DayEnd()上午 8:04(周一至周五)打电话,这是 Quartz.net 迄今为止最好的选择,但我不知道如何在 jobExecution 方法中调用这两个操作方法。

有什么办法可以做到这一点?

public ActionResult StartDay()
{
  int userid = Auth.UserID;
  daysServices.StartDay(userid);
  return RedirectToAction("Index", "Home", new { isdayClose = false });
}

public ActionResult CloseDay()
{
  int userid = Auth.UserID;
  int dayId = daysServices.getActiveDay();
  int shiftId = daysServices.getActiveShift();
  daysServices.CLoseDay(dayId, userid, shiftId);           
  return RedirectToAction("TokenDayAmount", "Home", new { isdayClose = true });
}

public async Task Execute(IJobExecutionContext context)
{
  await Console.Out.WriteLineAsync("HelloJob is executing.");
  //I hope something like this? DayStart();
}

标签: c#asp.netquartz-schedulerquartz.net

解决方案


为此,您需要三个步骤。首先创建一个工作

public class SomeJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
            DayStart(); //this is your start method
    }
}

其次,当您的作业将执行时,您需要一个调度程序。您可以使用Cron Trigger来安排您的工作,例如

public class SomeJobScheduler
{
    public static void Start()
    {
        IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        scheduler.Start();

        IJobDetail job = JobBuilder.Create<SomeJob>().Build();
        ITrigger trigger = TriggerBuilder.Create()
        .WithCronSchedule("0 05 8 ? * MON-FRI *") //This expression to schedule your job Mon-Fri 8.05 AM
        .Build();

        scheduler.ScheduleJob(job, trigger);
    }
}

你可以找到更多关于Cron Ttrigger 这里

第三次打电话给你SchedulerGlobal,asax.cs

 void Application_Start(object sender, EventArgs e)
    {
     SomeJobScheduler.Start();
    }

推荐阅读