Skip to content

DefaultInMemoryCachingProvider not remove _Lock on dataRetriever exception #306

@Zonnery

Description

@Zonnery

Steps to Reproduce

  1. Set LockMs setting to N seconds (100000 for example)
  2. Call GetAsync DefaultInMemoryCachingProvider with data retriever that throws an exception
  3. Call GetAsync with same key in parallel.
  4. GetAsync call on step 3 will be await for N seconds cause DefaultInMemoryCachingProvider will not remove _Lock flag on exception.

Related code

var res = dataRetriever();
if (res != null || _options.CacheNulls)
{
Set(cacheKey, res, expiration);
//remove mutex key
_cache.Remove($"{cacheKey}_Lock");
return new CacheValue<T>(res, true);
}
else
{
//remove mutex key
_cache.Remove($"{cacheKey}_Lock");
return CacheValue<T>.NoValue;
}

Solution:
Remove _Lock key also when dataRetriever throw an exception.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions