Tag: delay

有没有`Task.Delay`的变体在实时通过后到期,例如即使系统被暂停和恢复?

我有一种情况,我觉得在现实世界中等待一段时间的周期性动作之间有一段延迟,而不是等待系统时钟嘀嗒几次。 通过这种方式,我可以更新在不同系统上跟踪的租约/在实际经过一段时间后实时超时。 我怀疑Task.Delay可能已经有这种行为,但我想确定,所以我写了一个测试程序(见下文)。 我的发现是,当系统挂起并恢复时, Task.Delay行为完全不同。 从观察其行为开始, Task.Delay就像它一样: 将计数器设置为通过此时间量所需的计时器滴答数。 每次计时器滴答时计数器减少。 当计数器达到0时,标记为已完成。 有没有办法以这样一种方式await我可以在经过一定量的实时后运行任务,这样如果系统或进程在延迟过期后恢复,我的继续可以被触发? 现在,作为一种解决方法,只要Task.Delay过期或SystemEvents.PowerModeChanged触发Resume ,我就会Resume 。 这是处理这种情况的正确方法吗? 对于我来说,用这种方式编写两个用于不同目的的API似乎很奇怪,我惊讶地发现SystemEvents.PowerModeChanged存在。 另外,我担心这个API在Microsoft.Win32命名空间中可能不是可移植的。 实验 using Microsoft.Win32; using System; using System.Threading.Tasks; class Program { static int Main(string[] args) => new Program().Run(args).Result; async Task Run(string[] args) { SystemEvents.PowerModeChanged += (sender, e) => Console.WriteLine($”{e}: {e.Mode}”); var targetTimeSpan = TimeSpan.FromSeconds(20); var start = DateTime.UtcNow; var […]