C# 使用Topshelf执行多个Quartz.NET作业
我正在尝试使用C#运行Quartz.NET和Topshelf的多个作业C# 使用Topshelf执行多个Quartz.NET作业,c#,quartz-scheduler,quartz.net,topshelf,C#,Quartz Scheduler,Quartz.net,Topshelf,我正在尝试使用C#运行Quartz.NET和Topshelf的多个作业 HostFactory.Run(c=> { c、 ScheduleQuartzJobaService(q=> q、 WithJob(()=>JobBuilder.Create().Build()) .AddTrigger(()=>TriggerBuilder.Create().WithSimpleSchedule(builder=>builder.WithIntervalInSeconds(ConfigurationSett
HostFactory.Run(c=>
{
c、 ScheduleQuartzJobaService(q=>
q、 WithJob(()=>JobBuilder.Create().Build())
.AddTrigger(()=>TriggerBuilder.Create().WithSimpleSchedule(builder=>builder.WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically()。
ScheduleQuartzJobaService(r=>
r、 WithJob(()=>JobBuilder.Create().Build())
.AddTrigger(()=>TriggerBuilder.Create().WithSimpleSchedule(builder=>builder。
使用IntervalinSeconds(ConfigurationSettings.AppFrequencyInSeconds.RepeatForever()).Build())
).StartAutomatically();
c、 StartAutomatically();
c、 SetServiceName(“ServiceName”);
});
使用上述代码,只有TypeB中的execute方法被执行。我也尝试过:
HostFactory.Run(c =>
{
c.ScheduleQuartzJobAsService(q =>
q.WithJob(() => JobBuilder.Create<TypeA>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically();
c.StartAutomatically();
c.SetServiceName("Service1");
c.ScheduleQuartzJobAsService(r =>
r.WithJob(() => JobBuilder.Create<TypeB>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically();
c.StartAutomatically();
c.SetServiceName("Service2");
});
HostFactory.Run(c=>
{
c、 ScheduleQuartzJobaService(q=>
q、 WithJob(()=>JobBuilder.Create().Build())
.AddTrigger(()=>TriggerBuilder.Create().WithSimpleSchedule(builder=>builder。
使用IntervalinSeconds(ConfigurationSettings.AppFrequencyInSeconds.RepeatForever()).Build())
).StartAutomatically();
c、 StartAutomatically();
c、 设置服务名称(“服务1”);
c、 ScheduleQuartzJobaService(r=>
r、 WithJob(()=>JobBuilder.Create().Build())
.AddTrigger(()=>TriggerBuilder.Create().WithSimpleSchedule(builder=>builder。
使用IntervalinSeconds(ConfigurationSettings.AppFrequencyInSeconds.RepeatForever()).Build())
).StartAutomatically();
c、 StartAutomatically();
c、 SetServiceName(“服务2”);
});
使用此代码,只调用TypeB中的execute方法。我的类TypeA和TypeB都有“Execute”方法,它们是每个类的入口点(如果它们本身是作业的一部分,则会调用它们)。看起来,无论第二个服务代码是什么,都是始终被调用的服务代码——如果我交换这两个ScheduleQuartzJobaService调用的顺序,那么执行的总是第二个调用中的类
如何编写HostFactory.Run方法以使两个作业同时执行
HostFactory.Run(c =>
{
c.Service<ContainerService>(s =>
{
s.ConstructUsing(name => new ContainerService());
s.WhenStarted((service, control) => service.Start());
s.WhenStopped((service, control) => service.Stop());
s.ScheduleQuartzJob<ContainerService>(q =>
q.WithJob(() =>
JobBuilder.Create<TypeA>().Build())
.AddTrigger(() =>
TriggerBuilder.Create()
.WithSimpleSchedule(builder => builder
.WithIntervalInSeconds(20)
.RepeatForever())
.Build())
);
s.ScheduleQuartzJob<ContainerService>(q =>
q.WithJob(() =>
JobBuilder.Create<TypeB>().Build())
.AddTrigger(() =>
TriggerBuilder.Create()
.WithSimpleSchedule(builder => builder
.WithIntervalInSeconds(60)
.RepeatForever())
.Build())
);
});
});
我的问题是我混淆了服务和职业课程的概念。当我使用返回true的
Start()
和Stop()
bool方法引入我的ContainerService
时,我调用了ScheduleQuartzJob
而不是schedulequartzjobaservice
上述代码作为我的TypeA
和TypeB
已经实现了IJob
,我发现第二种方法永远也不会起作用,就像我所说的那样。因此,我想我需要知道的是如何在一个服务中运行多个作业。能否更新此内容以显示您的容器服务
?谢谢。我现在明白了。如果你把你的应用程序作为一项服务安装在windows中,这难道不意味着停止服务的调用实际上并没有停止它吗?实际上我有几个问题。如果有人能回答这些问题,非常感谢!1.如果服务关闭或崩溃,是否会取消工作?2.我计划在一个服务中实现许多作业,重新设计任何内容是一个好主意,还是使用ScheduleQuartzJob
将所有作业定义放在彼此的下面?
HostFactory.Run(c =>
{
c.Service<ContainerService>(s =>
{
s.ConstructUsing(name => new ContainerService());
s.WhenStarted((service, control) => service.Start());
s.WhenStopped((service, control) => service.Stop());
s.ScheduleQuartzJob<ContainerService>(q =>
q.WithJob(() =>
JobBuilder.Create<TypeA>().Build())
.AddTrigger(() =>
TriggerBuilder.Create()
.WithSimpleSchedule(builder => builder
.WithIntervalInSeconds(20)
.RepeatForever())
.Build())
);
s.ScheduleQuartzJob<ContainerService>(q =>
q.WithJob(() =>
JobBuilder.Create<TypeB>().Build())
.AddTrigger(() =>
TriggerBuilder.Create()
.WithSimpleSchedule(builder => builder
.WithIntervalInSeconds(60)
.RepeatForever())
.Build())
);
});
});
public class ContainerService
{
public bool Start()
{
return true;
}
public bool Stop()
{
return true;
}
}