我正在向未充分利用的 Azure Web 角色添加一个简单的工作进程。为了可靠性/正常运行时间,我在 2 个实例上运行了这个 Web 角色。这个工作进程将被设置为休眠大约 5 分钟,然后再执行一个操作,然后再次休眠。通过将此工作进程添加到 Web 角色,它将在多个实例上运行,并且它们都将尝试同时执行相同的操作。通常这个问题可以通过使用队列来解决,但我不需要任何复杂的东西。我只是为了防止两个实例完全同步。
我的想法是将 thread.sleep 从硬编码的等待时间更改为随机等待时间,如下所示:
Public Overrides Sub Run()
Trace.WriteLine("Worker Role entry point called.", "Information")
While (True)
Dim r As New Random
Dim wait As Integer = r.Next(60000, 600000)
Dim Minutes As Decimal = wait / 60000
Thread.Sleep(wait)
Trace.WriteLine(String.Format("Worker Role - Triggered on {0:f}. Waited {1:N2} Minutes.", Now(), Minutes), "Information")
End While
End Sub
实例 0 的输出:
信息:调用了工作角色入口点。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:37 触发。等了 7.71 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:41 触发。等了 4.25 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:49 触发。等了 7.87 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:53 触发。等了 4.77 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 10:03 触发。等了 9.91 分钟。
实例 1 的输出:
信息:调用了 Worker Role 入口点。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:38 触发。等了 9.47 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:44 触发。等了 6.15 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:48 触发。等了 3.41 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:49 触发。等了 1.63 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 9:58 触发。等了 8.26 分钟。
信息:工人角色 - 于 2012 年 8 月 27 日星期一上午 10:01 触发。等了 3.14 分钟。
这个计划是否有我没有看到的缺陷?感谢您的输入!