在模块教程 KernelSU 解决方案中,我们讨论了位置 backend/src/schedules.rs 中的 ScheduleService::run 方法。这个方法在注释中被描述为在队列满时“重试同一个槽位”,但实际实现是直接修改 next_run_at 属性。这种实现方式导致了几个问题:首先,槽位时间 due 被替换为 now + BUSY_RETRY_MS,其次,following() 方法之后以新值为起点,原网格被平移,最后,request_key(包含 due)随之变化,不再是同一个槽位。这种实现方式在首次运行时,例如在 10:00,每 60 分钟尝试执行任务,但由于队列满,任务实际上会在 10:01 才执行,导致后续任务如 11:01、12:01 等都延后执行。然而,期望的行为是网格应保持 10:00、11:00、12:00 的顺序,仅当次任务延后。此外,Busy 分支没有测试覆盖,修复时建议一并补上。
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议。转载请注明来自KernelSU分享库 !
评论已关闭