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

时间:2015-10-20 11:19:44

标签: c# .net timer system.reactive suspend

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

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

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

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

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

睡眠感知计时器

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

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

0 个答案:

没有答案