У меня есть класс BrokeredMessageContext, который использует Timer для периодической проверки и обновления блокировки экземпляра BrokeredMessage на случай, если процесс, обрабатывающий это сообщение, выполняется дольше, чем ожидалось. Он обновляет блокировку, вызывая метод RenewLock() для экземпляра BrokeredMessage.
Я ожидал, что этот вызов даст мне новую блокировку с тем же временем ожидания, что и исходная блокировка (MSDN утверждает, что "Вы можете продлевать блокировки на время, равное тайм-ауту блокировки объекта, и максимальной продолжительности продления блокировки нет."), но при отладке выясняется, что время ожидания блокировки увеличивается на «произвольные» 10-15 секунд. Я установил наблюдение за экземпляром BrokeredMessage и вижу, что к свойству LockedUntilUtc добавляется 10-15 секунд каждый раз, когда я вызываю RenewLock().
Кто-нибудь знает, почему это так? Можно ли что-нибудь сделать, чтобы продлить срок блокировки?
ИЗМЕНИТЬ:
Ответ Майка ниже правильный. Я обнаружил, что на самом деле пытался обновлять блокировку каждые десять секунд с самого начала, хотя мой код был предназначен для обновления блокировки сейчас, раньше, чем за двадцать секунд до истечения срока действия блокировки. Все сводилось к проблеме сравнения времени и тому факту, что время на моей машине было неправильным (оно опережало почти на минуту). О!