gpt4 book ai didi

c# - System.Timers.Timer在Azure辅助角色中徘徊

转载 作者:行者123 更新时间:2023-12-03 06:05:50 25 4
gpt4 key购买 nike

我有一个包含 n 个(当前 n = 2)个实例的 Azure 辅助角色。每个实例的主线程上都有一个 System.Timers.Timer,每 20 秒执行一次,产生一些工作进程。当角色实例最初启动时,它们通过内部端点同步自身,以便计时器同时启动(这是可行的)。

在一天的过程中,这两个具有相同间隔的计时器往往会漂移 - 一个最终会比以前提前几秒钟开始,而另一个可能会朝相同的方向发展,或者更糟糕的是另一个。

我的运行方法基本上如下:

public override void Run()
{
while (true)
{
GC.KeepAlive(this.LogTimer); // make sure garbage collection never touches the timer
}
}

问题:

  1. 可能是什么原因造成的?
  2. 将 Thread.Sleep(sleeptimeinMS) 调用添加到 while(true){} 循环会改善这是通过防止主线程一直忙(以允许计时器线程以某种方式更自由地履行其职责?)?
  3. 正确的答案是我应该尝试将角色重新同步到某些人外部时钟周期性地?
  4. 有什么完全不同的方法来实现这一点吗?

预先感谢您的宝贵时间,

亚历克斯

最佳答案

System.Timers.Timer 并不是 100% 准确,它受到操作系统中线程调度的限制。两个单独的服务器各自运行一个计时器,最终会失去同步,这是有道理的。

关于c# - System.Timers.Timer在Azure辅助角色中徘徊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com