使用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的问题?
答案 0 :(得分:1)
在Quartz.Net 3.x Alpha中,scheduler.Start
,scheduler.ScheduleJob
等方法现在是async
,这意味着你需要await
他们。您的代码中发生的情况是Task
返回的ScheduleJob
在调用Shutdown
之前甚至没有执行,因为您还没有等待它。
您可以按照Quick Start Guide查看确切的使用方法。
简而言之,您需要做什么:
async
/ await
语义scheduler.AddJob
方法将作业添加到调度程序(在这种情况下,您的作业必须声明为持久作业,因为您没有将触发器与其关联)。scheduler.TriggerJob()
方法来触发您的工作