使用 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.Start
、scheduler.ScheduleJob
等方法现在async
,这意味着你需要await
它们。代码中发生的情况是,ScheduleJob
返回的Task
甚至在调用Shutdown
之前都没有执行,因为您没有等待它。
您可以按照快速入门指南准确了解如何使用它。
简而言之,您需要做的是:
- 使用
async
/await
语义 - 通过调用
scheduler.AddJob
方法将作业添加到计划程序(在这种情况下,必须将作业声明为持久作业,因为您不会将触发器与其关联( - 然后可以调用
scheduler.TriggerJob()
方法来触发作业