Cit*_*rus 6 c# quartz-scheduler quartz.net topshelf
我试图使用C#在Quartz.NET和Topshelf上运行多个作业.
HostFactory.Run(c =>
{
c.ScheduleQuartzJobAsService(q =>
q.WithJob(() => JobBuilder.Create<TypeA>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically().
ScheduleQuartzJobAsService(r =>
r.WithJob(() => JobBuilder.Create<TypeB>().Build())
.AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
).StartAutomatically();
c.StartAutomatically();
c.SetServiceName("ServiceName");
});
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,只执行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");
});
Run Code Online (Sandbox Code Playgroud)
使用此代码,仅调用TypeB中的execute方法.我的类TypeA和TypeB都有'Execute'方法,这些方法是每个类的入口点(如果它们是作业的一部分,它们会被调用).似乎第二个服务代码是总是被调用的服务代码 - 如果我交换这两个ScheduleQuartzJobAsService调用的顺序,它总是在第二个调用中执行的类.
如何编写HostFactory.Run方法,以便同时执行两个作业?
Cit*_*rus 13
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())
);
});
});
Run Code Online (Sandbox Code Playgroud)
...
public class ContainerService
{
public bool Start()
{
return true;
}
public bool Stop()
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我混淆了服务和工作类的概念.一旦我介绍了返回true的ContainerServicewith Start()和Stop()bool方法,我就打电话ScheduleQuartzJob而不是ScheduleQuartzJobAsService上面的代码为我工作,TypeA并且TypeB已经实现了IJob.
| 归档时间: |
|
| 查看次数: |
7121 次 |
| 最近记录: |