Created
October 25, 2021 15:35
-
-
Save lhall690/3c887bad32098699fd16c95e8861c567 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[CODE LANGUAGE=CSHARP] | |
PUBLIC STATIC CLASS CACHEMANAGER { | |
PRIVATE STATIC CONCURRENTDICTIONARY < STRING, OBJECT > CACHELOCKS = | |
NEW CONCURRENTDICTIONARY < STRING, OBJECT > (); | |
PUBLIC STATIC EXPENSIVEOBJECT GETEXPENSIVEOBJECT() { | |
VAR CACHE = HTTPCONTEXT.CURRENT.CACHE; | |
VAR OBJ = CACHE[THE_KEY] AS EXPENSIVEOBJECT; | |
IF (OBJ == NULL) { | |
//GET A LOCK | |
VAR LOCKOBJECT = GETCACHELOCK(THE_KEY); | |
//CHECK AGAIN | |
IF (OBJ == NULL) { | |
LOCK(LOCKOBJECT) { | |
OBJ = GETITFROMSOURCE(); | |
} | |
} | |
} | |
RETURN OBJ; | |
} | |
PRIVATE STATIC OBJECT GETCACHELOCK(STRING CACHEKEY) { | |
VAR LOCKOBJECT = CACHELOCKS.GETORADD(CACHEKEY, | |
O => NEW OBJECT()); | |
RETURN LOCKOBJECT; | |
} | |
} | |
[/CODE] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment