Quartz.net 将任务安排到 运行 5 分钟

Quartz.net schedule a task to run for 5 minutes

我的要求是构建一个 Quartz.net 任务:

我有这个class:

    public class Proccess
    {
        public static void Start()
        {
            Console.WriteLine("I'm starting");
        }

        public static void End()
        {
            Console.WriteLine("I'm finishing");
        }
    }

有什么方法可以配置 Quartz.Net 的作业来调用 Process.Start() 等待 X 分钟然后调用 Process.End() 吗?

也许是这样的?

public class TapWaterJob : IJob
{
    public TapWaterJob()
    {
        // quartz requires a public empty constructor so that the
        // scheduler can instantiate the class whenever it needs.
    }

    public void Execute(IJobExecutionContext context)
    {
        Proccess.Start();
        System.Threading.Thread.Sleep(10000);
        Process.End();
    }
}

如果您只是想运行完成某些事情,似乎让对象自行停止是正确的方法(即自己调用停止)。

如果你想让 Quartz 调用停止,你可以这样做:

var jobMap = new JobDataMap();
jobMap.Put("process", process);

var startJob = JobBuilder.Create<StartJob>()
    .WithIdentity("startJob")
    .SetJobData(jobMap).Build();
ITrigger startTrigger = TriggerBuilder.Create()
    .WithIdentity("startTrigger")
    .StartNow()
    .Build();
var stopJob = JobBuilder.Create<StopJob>()
    .WithIdentity("stopJob")
    .SetJobData(jobMap).Build();
ITrigger stopTrigger = TriggerBuilder.Create()
    .WithIdentity("stopTrigger")
    .StartAt(DateTime.Now.AddMinutes(5))
    .Build();

var sched = StdSchedulerFactory.GetDefaultScheduler();
sched.Start();
sched.ScheduleJob(startJob, startTrigger);
sched.ScheduleJob(stopJob, stopTrigger);

5 参数替换为 StartAt 为您要等待的分钟数的变量。