Мне нужно сверху создать функцию, которая получает следующее целое число в последовательности от 1 до 60. Каждый раз, когда вызывается функция, мне нужно, чтобы она увеличивалась с того, что было последним значением, и возвращала следующее число в качестве результата.Он также не может вернуть одно и то же целое число в 2 последовательных вызовах.Когда счетчик достигает 60, последовательность должна быть сброшена обратно до 1. Я хотел бы, чтобы функция не имела параметров.
Я создал функцию, которая делает это, используя кэш для хранения последнего значения, которое быловернулся, но меня беспокоит, что при одновременных вызовах функции она может работать не так, как я ожидаю, и 2 вызова могут получить одно и то же целое число.
Кэш-память блокирует правильный метод для использования в этом случае или существуеткакой-то другой метод, о котором я не думаю?
Кроме того, застрял с помощью .Net 3.5, и это веб-приложение.
Я только что написал эту функцию на основе использования SyncLock.Есть какие-то очевидные проблемы с этим, которых я не вижу?Я использую кэш для сохранения последнего возвращенного значения.
Private Shared Function GetNextNumber() As Integer
Dim o As Integer
Dim r As Integer
If Not Cache("NextNumber") Is Nothing Then
o = DirectCast(Cache("NextNumber"), Integer)
Else
Cache.Insert("NextNumber", 1, Nothing, Nothing, Nothing, Caching.CacheItemPriority.NotRemovable, Nothing)
End If
Dim lock As New Object
SyncLock lock
If o = 60 Then
r = 1
Else
r = o + 1
End If
Cache.Insert("NextNumber", r, Nothing, Nothing, Nothing, Caching.CacheItemPriority.NotRemovable, Nothing)
End SyncLock
Return r
End Function