如何在 C# 中完成 'WithRepeatCount' 后停止作业
How to stop a job when 'WithRepeatCount' done in C#
如何停止我在 quartz.net 2.6.1 中的工作。当 WithRepeatCount
完成后,即使我关闭应用程序,它仍然是 运行ning 背景。我的意思是我想 运行 scheduler.Shutdown()
计数完成后。
private void Start_Click(object sender, RoutedEventArgs e)
{
Trigger trigger = new Trigger();
trigger.StartTrigger();
}
private void Stop_Click(object sender, RoutedEventArgs e)
{
Trigger trigger = new Trigger();
trigger.StopTrigger();
}
[DisallowConcurrentExecution]/**/
class Job : IJob
{
public void Execute(IJobExecutionContext context)
{
IsConnected.CheckConnection();
}
}
class Trigger
{
private IScheduler Start()
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Start();
return sched;
}
private IScheduler Stop()
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Shutdown();
return sched;
}
public void StartTrigger()
{
IScheduler sched = Start();
IJobDetail Job = JobBuilder.Create<Job>().WithIdentity("Job", null).Build();
ISimpleTrigger TriggerJob =
(ISimpleTrigger)TriggerBuilder
.Create()
.WithIdentity("Job")
.StartAt(DateTime.UtcNow)
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.WithRepeatCount(4)
)
.Build();
sched.ScheduleJob(Job, TriggerJob);
sched.Start();
}
public void StopTrigger()
{
IScheduler sched = Stop();
sched.Shutdown();
}
}
如果 .WithIntervalInSeconds(1) .WithRepeatCount(4) 意味着它会 运行 5 秒然后它仍然会 运行 直到永远在后台.所以如果我添加 Thread.Sleep(4000);和 sched.Shutdown(); 在 sched.Start(); 之后它将 运行 5 秒然后它将是 closed.The 代码应该是这样的 ;
public void StartTrigger()
{
try
{
IScheduler sched = Start();
IJobDetail Job = JobBuilder.Create<Job>().WithIdentity("Job", null).Build();
ISimpleTrigger TriggerJob =
(ISimpleTrigger)TriggerBuilder
.Create()
.WithIdentity("Job")
.StartAt(DateTime.UtcNow)
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.RepeatForever()
//.WithRepeatCount(4)
.WithMisfireHandlingInstructionNextWithExistingCount())
.Build();
sched.ScheduleJob(Job, TriggerJob);
sched.Start();
Thread.Sleep(4T000);
sched.Shutdown();
}
也许你得看看石英 listeners 并弄清楚如何获得计数:
IScheduler sched = Start();
IJobDetail jobDetail = GetJobDetail();
var listener = new CountJobListener();
sched.ListenerManager.AddJobListener(listener, KeyMatcher<JobKey>.KeyEquals(jobDetail.Key));
sched.Start();
实现您自己的侦听器:
internal class CountJobListener : IJobListener
{
public void JobToBeExecuted(IJobExecutionContext context)
{
}
public void JobExecutionVetoed(IJobExecutionContext context)
{
}
public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
if (GetCount() >= 4)
{
context.Scheduler.Shutdown();
}
}
private int GetCount()
{
throw new NotImplementedException();
}
public string Name { get { return "CountJobListener"; } }
}
如何停止我在 quartz.net 2.6.1 中的工作。当 WithRepeatCount
完成后,即使我关闭应用程序,它仍然是 运行ning 背景。我的意思是我想 运行 scheduler.Shutdown()
计数完成后。
private void Start_Click(object sender, RoutedEventArgs e)
{
Trigger trigger = new Trigger();
trigger.StartTrigger();
}
private void Stop_Click(object sender, RoutedEventArgs e)
{
Trigger trigger = new Trigger();
trigger.StopTrigger();
}
[DisallowConcurrentExecution]/**/
class Job : IJob
{
public void Execute(IJobExecutionContext context)
{
IsConnected.CheckConnection();
}
}
class Trigger
{
private IScheduler Start()
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Start();
return sched;
}
private IScheduler Stop()
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Shutdown();
return sched;
}
public void StartTrigger()
{
IScheduler sched = Start();
IJobDetail Job = JobBuilder.Create<Job>().WithIdentity("Job", null).Build();
ISimpleTrigger TriggerJob =
(ISimpleTrigger)TriggerBuilder
.Create()
.WithIdentity("Job")
.StartAt(DateTime.UtcNow)
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.WithRepeatCount(4)
)
.Build();
sched.ScheduleJob(Job, TriggerJob);
sched.Start();
}
public void StopTrigger()
{
IScheduler sched = Stop();
sched.Shutdown();
}
}
如果 .WithIntervalInSeconds(1) .WithRepeatCount(4) 意味着它会 运行 5 秒然后它仍然会 运行 直到永远在后台.所以如果我添加 Thread.Sleep(4000);和 sched.Shutdown(); 在 sched.Start(); 之后它将 运行 5 秒然后它将是 closed.The 代码应该是这样的 ;
public void StartTrigger()
{
try
{
IScheduler sched = Start();
IJobDetail Job = JobBuilder.Create<Job>().WithIdentity("Job", null).Build();
ISimpleTrigger TriggerJob =
(ISimpleTrigger)TriggerBuilder
.Create()
.WithIdentity("Job")
.StartAt(DateTime.UtcNow)
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.RepeatForever()
//.WithRepeatCount(4)
.WithMisfireHandlingInstructionNextWithExistingCount())
.Build();
sched.ScheduleJob(Job, TriggerJob);
sched.Start();
Thread.Sleep(4T000);
sched.Shutdown();
}
也许你得看看石英 listeners 并弄清楚如何获得计数:
IScheduler sched = Start();
IJobDetail jobDetail = GetJobDetail();
var listener = new CountJobListener();
sched.ListenerManager.AddJobListener(listener, KeyMatcher<JobKey>.KeyEquals(jobDetail.Key));
sched.Start();
实现您自己的侦听器:
internal class CountJobListener : IJobListener
{
public void JobToBeExecuted(IJobExecutionContext context)
{
}
public void JobExecutionVetoed(IJobExecutionContext context)
{
}
public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
if (GetCount() >= 4)
{
context.Scheduler.Shutdown();
}
}
private int GetCount()
{
throw new NotImplementedException();
}
public string Name { get { return "CountJobListener"; } }
}