使用 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
等方法现在是异步
,这意味着您需要等待
它们。您的代码中发生的情况是,ScheduleJob
返回的 Task
在调用 Shutdown
之前甚至没有执行,因为您没有等待它。
您可以关注Quick Start Guide详细了解如何使用它。
简而言之,您需要做什么:
- 使用
async
/await
语义 - 通过调用
scheduler.AddJob
方法将作业添加到调度程序(在这种情况下,您的作业必须声明为持久作业,因为您没有将触发器与其关联) - 然后您可以调用
scheduler.TriggerJob()
方法来触发您的作业
关于c# - 手动触发作业不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865509/