手动触发工作无效

时间:2017-08-24 15:26:30

标签: c# quartz.net .net-standard-2.0 quartz.net-3.0

使用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
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

您可以按照Quick Start Guide查看确切的使用方法。

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

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