gpt4 book ai didi

asp.net - 此代码是否可以阻止 2 个独立的 Azure 工作线程实例同时执行操作?

转载 作者:行者123 更新时间:2023-12-03 04:47:26 29 4
gpt4 key购买 nike

我正在向未充分利用的 Azure Web 角色添加一个简单的工作进程。我在 2 个实例上运行此 Web 角色,以提高可靠性/正常运行时间。该工作进程将在执行操作之前设置为 sleep 大约 5 分钟,然后再次 sleep 。通过将此工作进程添加到 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 的输出:
信息:调用了辅助角色入口点。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:37 触发。等了 7.71 分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:41 触发。等了 4.25 分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:49 触发。等了 7.87 分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:53 触发。等了 4.77 分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 10:03 触发。等待了 9.91 分钟。

实例 1 的输出:
信息:调用了辅助角色入口点。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:38 触发。等了 9.47 分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:44 触发。等了 6.15 分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:48 触发。等了3.41分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:49 触发。等了1.63分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 9:58 触发。等了8.26分钟。
信息: worker 角色 - 于 2012 年 8 月 27 日星期一上午 10:01 触发。等了 3.14 分钟。

这个计划是否有我没有发现的缺陷?感谢您的投入!

最佳答案

好吧,回答你的标题问题,这并不能保证他们同时做某事。但这肯定会降低这种可能性。

也就是说,使用实际的并发控制机制并不需要“精心设计”。来自 http://blog.smarx.com/posts/simple-scheduling-in-windows-azure :

AutoRenewLease.DoEvery(blob, TimeSpan.FromMinutes(5), () => {
Trace.WriteLine("Doing stuff at {0:R}", DateTimeOffset.UtcNow);
});

为什么不这样做呢?它以 NuGet 包的形式提供,并且可以缩短您的代码。 :-)

关于asp.net - 此代码是否可以阻止 2 个独立的 Azure 工作线程实例同时执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149345/

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