手动触发一个不工作的工作
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.Start
、scheduler.ScheduleJob
等方法现在是 async
,这意味着您需要await
他们。您的代码中发生的情况是 ScheduleJob
返回的 Task
在调用 Shutdown
之前甚至没有执行,因为您没有等待它。
您可以按照Quick Start Guide查看具体使用方法。
简而言之,您需要做什么:
- 使用
async
/await
语义
- 通过调用
scheduler.AddJob
方法将作业添加到调度程序(在这种情况下,您的作业必须声明为持久的,因为您没有将触发器与其相关联)
- 然后你可以调用
scheduler.TriggerJob()
方法来触发你的工作
使用 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
之前甚至没有执行,因为您没有等待它。
您可以按照Quick Start Guide查看具体使用方法。
简而言之,您需要做什么:
- 使用
async
/await
语义 - 通过调用
scheduler.AddJob
方法将作业添加到调度程序(在这种情况下,您的作业必须声明为持久的,因为您没有将触发器与其相关联) - 然后你可以调用
scheduler.TriggerJob()
方法来触发你的工作