.net core 在NetCore控制台应用程序中运行简单的quartz示例

.net core 在NetCore控制台应用程序中运行简单的quartz示例,.net-core,quartz,.net Core,Quartz,我正在尝试在.NETCore控制台应用程序中运行SimpleQuartz 3.x示例。我有以下代码(摘自): 公共静态异步任务主(字符串[]args) { //构造调度程序工厂 NameValueCollection道具=新的NameValueCollection { {“quartz.serializer.type”,“binary”} }; StdSchedulerFactory=新StdSchedulerFactory(道具); //获取调度程序 isScheduler sched=wai

我正在尝试在.NETCore控制台应用程序中运行SimpleQuartz 3.x示例。我有以下代码(摘自):

公共静态异步任务主(字符串[]args)
{
//构造调度程序工厂
NameValueCollection道具=新的NameValueCollection
{
{“quartz.serializer.type”,“binary”}
};
StdSchedulerFactory=新StdSchedulerFactory(道具);
//获取调度程序
isScheduler sched=wait factory.GetScheduler();
等待sched.Start();
//定义作业并将其绑定到HelloJob类
IJobDetail job=JobBuilder.Create()
.WithIdentity(“我的工作”、“组1”)
.Build();
//触发作业立即运行,然后每40秒运行一次
ITrigger trigger=TriggerBuilder.Create()
.WithIdentity(“我的触发器”、“组1”)
.StartNow()
.使用SimpleSchedule(x=>x
.间隔秒(40)
.RepeatForever())
.Build();
等待ScheduleJob(作业、触发器);
}
公共类HelloJob:IJob
{
公共异步任务执行(IJobExecutionContext上下文)
{
等待Console.Out.WriteLineAsync(“HelloJob正在执行”);
}
}
随着对3.x的更改,所有内容都变得异步,它永远不会执行HelloJob。它只是运行到结束并退出控制台应用程序。我是不是遗漏了什么?我们不能在core控制台应用程序中运行这样的quartz作业吗

我可以在2.x版本的常规控制台应用程序中运行旧版本(不带异步方法),运行得很好:

public static void Main(string[] args)
{
    // construct a scheduler factory
    ISchedulerFactory schedFact = new StdSchedulerFactory();

    // get a scheduler
    IScheduler sched = schedFact.GetScheduler();
    sched.Start();

    // define the job and tie it to our HelloJob class
    IJobDetail job = JobBuilder.Create<HelloJob>()
        .WithIdentity("myJob", "group1")
        .Build();

    // Trigger the job to run now, and then every 40 seconds
    ITrigger trigger = TriggerBuilder.Create()
      .WithIdentity("myTrigger", "group1")
      .StartNow()
      .WithSimpleSchedule(x => x
          .WithIntervalInSeconds(40)
          .RepeatForever())
      .Build();

    sched.ScheduleJob(job, trigger);
}

public class HelloJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Console.WriteLine("HelloJob is executing.");
    }
}
publicstaticvoidmain(字符串[]args)
{
//构造调度程序工厂
isSchedulerFactory schedFact=新StdSchedulerFactory();
//获取调度程序
isScheduler sched=schedFact.GetScheduler();
sched.Start();
//定义作业并将其绑定到HelloJob类
IJobDetail job=JobBuilder.Create()
.WithIdentity(“我的工作”、“组1”)
.Build();
//触发作业立即运行,然后每40秒运行一次
ITrigger trigger=TriggerBuilder.Create()
.WithIdentity(“我的触发器”、“组1”)
.StartNow()
.使用SimpleSchedule(x=>x
.间隔秒(40)
.RepeatForever())
.Build();
sched.ScheduleJob(作业,触发器);
}
公共类HelloJob:IJob
{
public void Execute(IJobExecutionContext上下文)
{
WriteLine(“HelloJob正在执行”);
}
}

我没有在控制台应用程序中使用Quartz 2.x,但3.x版的行为是预期的:在计划了
sched
之后,应用程序继续执行并退出

也许这不是最优雅的解决方案,但结尾的这两行应该会有所帮助:

。。。
sched.ScheduleJob(作业,触发器);
Console.ReadKey()
等待计划关机();
public static void Main(string[] args)
{
    // construct a scheduler factory
    ISchedulerFactory schedFact = new StdSchedulerFactory();

    // get a scheduler
    IScheduler sched = schedFact.GetScheduler();
    sched.Start();

    // define the job and tie it to our HelloJob class
    IJobDetail job = JobBuilder.Create<HelloJob>()
        .WithIdentity("myJob", "group1")
        .Build();

    // Trigger the job to run now, and then every 40 seconds
    ITrigger trigger = TriggerBuilder.Create()
      .WithIdentity("myTrigger", "group1")
      .StartNow()
      .WithSimpleSchedule(x => x
          .WithIntervalInSeconds(40)
          .RepeatForever())
      .Build();

    sched.ScheduleJob(job, trigger);
}

public class HelloJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Console.WriteLine("HelloJob is executing.");
    }
}