电脑进入睡眠模式时System.Timers.Timer状态及唤醒后运行情况问询
System.Timers.Timer睡眠/唤醒行为解答
核心结论
你的推测在Windows默认配置场景下是正确的,具体的运行表现分两种场景说明:
设备进入睡眠模式后的定时器变化
System.Timers.Timer属于用户态的软件定时器,依赖系统正常运行时的时钟滴答计数工作,本身不具备唤醒硬件的权限:
- 当设备进入传统S3(待机)、S4(休眠)睡眠状态时,整个系统的用户态任务都会暂停运行,定时器的计时会直接停止,不会记录睡眠期间的时间流逝,也不会触发任何
Elapsed事件 - 当设备进入S0低功耗 idle(新式待机)状态时,若你的服务没有特殊配置允许后台唤醒执行,定时器同样会停止计时
设备唤醒后的定时器运行表现
- 默认无额外开发配置的情况下,定时器唤醒后会直接从0开始重新计数,走完你设置的3小时周期后才会触发第一次任务,不会补执行睡眠期间错过的任务
举个例子:定时器已经运行了2.5小时后设备进入睡眠,睡眠持续了10小时才被唤醒,唤醒后不会立刻执行任务,需要再等3小时才会触发Elapsed事件 - 如果你将定时器的
AutoReset属性设置为false,且睡眠前已经触发过一次Elapsed事件没有手动重启定时器,唤醒后定时器会保持停止状态,不会自动重新计数
可选优化方案(如果需要补偿漏执行的任务)
如果你的业务要求不能错过睡眠期间的执行计划,可以做如下适配:
- 在服务中监听系统
PowerModeChanged事件,检测到系统唤醒事件时,手动对比上次任务执行时间和当前时间的差值,差值超过3小时就立刻执行一次任务,再重置定时器计数 - 对执行时间精度要求高的场景,可以搭配Windows任务计划程序的唤醒定时器能力,实现即使设备睡眠也能唤醒执行任务的效果
内容的提问来源于stack exchange,提问作者privm
相关产品推荐
相关产品推荐

