gpt4 book ai didi

c# - 为什么 BrokeredMessage.RenewLock() 只更新几秒钟的锁?

转载 作者:太空狗 更新时间:2023-10-29 18:20:09 25 4
gpt4 key购买 nike

我有一个 BrokeredMessageContext 类,它使用 Timer 定期检查和更新 BrokeredMessage 实例上的锁,以防处理此消息的进程运行时间超过预期。它通过调用 BrokeredMessage 实例上的 RenewLock() 方法来更新锁定。

我预计此调用会给我一个与原始锁 ( MSDN states that "You can renew locks for the same duration as the entity lock timeout, and there is no maximum duration for a lock renewal." ) 具有相同超时的新锁,但在调试时,似乎锁超时增加了“任意”10-15 秒。我在 BrokeredMessage 实例上设置了监视,可以看到每次调用 RenewLock() 时,LockedUntilUtc 属性都会添加 10-15 秒。

有谁知道为什么会这样吗?有什么办法可以延长锁的更新时间吗?

编辑:

下面迈克的回答是正确的。我发现,事实上,我从一开始就尝试每十秒更新一次锁,尽管我的代码原本打算在锁到期前二十秒之前更新锁。这一切都归结为时间比较问题以及我机器上的时间错误(提前了近一分钟)这一事实。哦!

最佳答案

当您调用 RenewLock 时,它会重置消息被拉取消息的队列或订阅上设置的 LockDuration 锁定的时间。如果执行更新的类有一个每 10-15 秒触发一次的计时器,那么您看到的行为是正确的。

示例:我有一个锁定持续时间为 1 分钟(默认)的队列。
我在 UTC 凌晨 1:20 提取消息,因此 LockedUntilUtc 应显示为 UTC 凌晨 1:21。如果在处理 10 秒后我调用 Renew lock,则该调用会在凌晨 1:20:10 触发,因此 LockedUntilUtc 将变为凌晨 1:21.10。

它将锁定持续时间值添加到服务器的当前时间,而不是之前的 LockedUntilUtc 值。这会延长您对消息的锁定期限。

这个答案假设您经常触发计时器上的触发器,而不是等待接近实际的锁定超时。如果您想要更精确,您可以将计时器设置为在锁定到期前大约 10-20 秒触发,然后更新锁定。

关于c# - 为什么 BrokeredMessage.RenewLock() 只更新几秒钟的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433482/

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