如何在发送推送通知期间关闭计算机时处理 Quartz 触发器

Posted

技术标签:

【中文标题】如何在发送推送通知期间关闭计算机时处理 Quartz 触发器【英文标题】:How to handle Quartz trigger when Computer is turned off during sending push notification 【发布时间】:2016-12-18 04:53:32 【问题描述】:

要以 24 小时为间隔每天发送推送通知,我使用了石英库。但问题是当我的电脑关闭或我的网络断开连接时,也会触发这种代码和平,但我的推送通知没有发送。我的问题是当我的电脑关闭或网络断开时如何管理触发器? 我想在我的电脑打开或连接到互联网后发送推送通知。

 ITrigger trigger = TriggerBuilder.Create()
                .WithDailyTimeIntervalSchedule
                  (s =>
                     s.WithIntervalInHours(24)
                    .OnEveryDay()
                    .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(11, 00))
                  )
                .Build();

 scheduler.ScheduleJob(job, trigger);

【问题讨论】:

当你的电脑打开或连接到互联网时,也运行由计划触发的方法。 对不起,你想看看我24小时后触发的工作方法吗? 否,但您需要在每次应用程序启动或互联网连接恢复时触发该方法。 是的,我已经添加了那部分,但是在互联网断开连接期间出现了问题。 您必须构建一个新方法来检查连接性并设置一个新的间隔作业以每隔 x 秒检查一次。 【参考方案1】:

您需要 Misfire Instructions、JobExecutionException 和 DisallowConcurrentExecutionAttribute 的组合

    在你的作业上设置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 并告诉 Quartz 它应该再次触发触发器。

    public class MyJob : IJob
    
        public void Execute(IJobExecutionContext context)
        
            try
            
                // connect to internet or whatever.....
            
            catch(Exception)
            
                throw new JobExecutionException(true);
            
        
    
    

    下次先读documentation ;)

【讨论】:

以上是关于如何在发送推送通知期间关闭计算机时处理 Quartz 触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cordova 到达并且应用程序关闭时处理推送通知

取消发送的 Web 推送通知

关闭应用程序时如何避免处理来自 GCM 的推送通知

Web 应用程序如何向 iOS 设备发送推送通知? [关闭]

Xamarin.iOS - 设备关闭时推送通知

应用关闭时的 Android Studio 推送通知