c# - 手动触发作业不起作用

标签 c# quartz.net .net-standard-2.0 quartz.net-3.0

使用 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 等方法现在是异步,这意味着您需要等待它们。您的代码中发生的情况是,ScheduleJob 返回的 Task 在调用 Shutdown 之前甚至没有执行,因为您没有等待它。

您可以关注Quick Start Guide详细了解如何使用它。

简而言之,您需要做什么:

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

关于c# - 手动触发作业不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865509/

相关文章:

c# - Entity Framework (edmx)中列出的表的映射应该是什么

c# - 使用 Rhino Mocks 模拟私有(private)对象调用

asp.net - Quartz.Net 嵌入到 Asp.NET MVC2 中,而不是触发作业

c# - Quartz.NET 在随机持续时间后停止触发

c# - 无法在 .NET FX4.6 上的 .NET Standard2.0 库中使用 System.Configuration.Configuration 管理器

c# - 如何正确实现 .net 标准库的单元测试

c# - 如何在 .NET Standard 2.0 项目上实现 Dotfuscator?

c# - 使用 DataContractSerializer 序列化覆盖的属性

c# - 报告框架背后的基本原理

c# - 获取 Quartz.NET 中的所有触发器