手动触发一个不工作的工作

Manually triggering a job not working

使用 Quartz.Net 我想在没有计划的情况下手动触发作业(暂时)。但是作业在启动时运行(我不想要),然后无法响应手动触发器(主要问题)。

private IScheduler _scheduler;

public void SetupAndTestScheduler()
{
    ISchedulerFactory sf = new StdSchedulerFactory();
    _scheduler = sf.GetScheduler().Result;
    _scheduler.Start();
    _scheduler.ScheduleJob(
        new JobDetailImpl(nameof(TestDataJob), typeof(TestDataJob)), null);

    // manually trigger the job
    _scheduler.TriggerJob(jobKey: new JobKey(nameof(TestDataJob)));
}

public class TestDataJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        // blah blah blah
    }
}

我使用的是 NetStandard2.0,Quartz.Net Alpha 3。我想知道这是否是版本 3 的问题?

在 Quartz.Net 3.x Alpha 中,scheduler.Startscheduler.ScheduleJob 等方法现在是 async,这意味着您需要await 他们。您的代码中发生的情况是 ScheduleJob 返回的 Task 在调用 Shutdown 之前甚至没有执行,因为您没有等待它。

您可以按照Quick Start Guide查看具体使用方法。

简而言之,您需要做什么:

  • 使用 async/await 语义
  • 通过调用 scheduler.AddJob 方法将作业添加到调度程序(在这种情况下,您的作业必须声明为持久的,因为您没有将触发器与其相关联)
  • 然后你可以调用scheduler.TriggerJob()方法来触发你的工作