睡眠反抗计时器,理想情况下是反应性的

Cel*_*Cel 6 .net c# timer suspend system.reactive

在正常情况下,以下代码每两分钟很好地记录:

Observable.Interval(TimeSpan.FromSeconds(120)).Subscribe(
    l =>
        {                        
            var now = DateTime.Now;
            Console.WriteLine(
                "Tick at " + now.ToString("hh:mm:ss") + " Count " + l.ToString());        
        });
Run Code Online (Sandbox Code Playgroud)

设备休眠一段时间后然后恢复的行为

Tick at 11:30:00 Count 0
(11:31:55 put computer to sleep)
(no tick at 11:32:00 because PC is suspended, which is fine)
(no tick at 11:34:00 because PC is suspended)
(11:34:30 wake computer up)
(no tick as soon as possible to indicate that ticks were missed) 
Tick at 11:36:30 Count 1
Run Code Online (Sandbox Code Playgroud)

似乎Observable Interval定时器类重置自身并从设备恢复时起重新开始间隔.(我观察到与Observable Timer类似的行为)

睡眠感知计时器

我需要一个不会在恢复时重启间隔的计时器,但如果在睡眠期间错过了任何刻度,则需要一次计时器

  • 没有一次错过每个嘀嗒声,但是如果错过了任何数量的蜱,则总计一次
  • 这对于数小时或数天的TimeSpans特别相关,在某些情况下,如果笔记本电脑每天进入睡眠状态,计时器也不会再次打勾
  • 对于Observable Interval和Timer来说,指定这样的失火指令会很好吗?
  • 如果无法使其在Rx Observable空间中工作,是否有其他定时器以某种可配置的方式进行睡眠挑衅?
  • 尚未测试Quartz,但理想情况下不必包含更多依赖项,因此首选Observable或托管.NET解决方案
  • 同样适用于其他更深层次的睡眠模式,例如休眠