Skip to content

Instantly share code, notes, and snippets.

@lhall690
Created October 25, 2021 15:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lhall690/3c887bad32098699fd16c95e8861c567 to your computer and use it in GitHub Desktop.
Save lhall690/3c887bad32098699fd16c95e8861c567 to your computer and use it in GitHub Desktop.
[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