每天24小时发送推送通知,我使用石英库。但问题是当我的电脑关闭或我的网络断开连接时,这个代码的安静也被触发但我的推送通知没有发送。我的问题是,当我的电脑关闭或网络断开时,我如何管理触发器? 我想在打开电脑或连接到互联网后发送推送通知。
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule
(s =>
s.WithIntervalInHours(24)
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(11, 00))
)
.Build();
scheduler.ScheduleJob(job, trigger);
答案 0 :(得分:1)
您需要Misfire Instructions,JobExecutionException和DisallowConcurrentExecutionAttribute
的组合在作业上设置[DisallowConcurrentExecution]
public class MyJob : IJob
{
....
}
,这样可以防止您的作业同时执行多次。
Misfire Instruction
将ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule
(s =>
s.WithIntervalInHours(24)
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(11, 00))
.WithMisfireHandlingInstructionFireAndProceed()
)
.Build();
设置为您的触发器,这将告诉您的触发器在错过执行时立即触发。
JobExecutionException
在执行作业期间捕获任何异常,例如当互联网无法访问时。然后扔一个public class MyJob : IJob
{
public void Execute(IJobExecutionContext context)
{
try
{
// connect to internet or whatever.....
}
catch(Exception)
{
throw new JobExecutionException(true);
}
}
}
并告诉Quartz它应该再次触发触发器。
{{1}}
下次首先阅读documentation;