手动触发作业不起作用



使用 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之前都没有执行,因为您没有等待它。

您可以按照快速入门指南准确了解如何使用它。

简而言之,您需要做的是:

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

相关内容

  • 没有找到相关文章

最新更新