CFLOCK: какую область использовать? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть функция, которая генерирует токен для следующего события.давайте назовем этот eventID.Это числовое значение, но оно хранится в виде архива по деловым причинам.Эта функция может вызываться из нескольких мест внутри приложения, и во избежание состязаний во избежание генерации одного и того же идентификатора для разных пользователей была добавлена ​​блокировка области приложения.Но все же в некоторых случаях один и тот же идентификатор был сгенерирован для 2 разных событий.

<cffunction name="getEventID" returntype="string">
  <cfset var newID = "">
  <cflock scope="Application" timeout="5" throwontimeout="true">
   <cfquery name="qry" datasource="#DSN#">
     SELECT TOP 1 CONVERT(int, eventID) AS eventID
     FROM events WHERE ISNUMERIC(eventID) = 1
     ORDER BY CONVERT(int, eventID) DESC  
   </cfquery>
  <cfset newID = qry.eventID + 1>
 </cflock>
<cfreturn newID>
</cffunction>

Что-то не так с реализацией CFLOCK?

...