public static async Task <T> GetOrCreateAsync <T>(this ICacheAsync cache, string key, Func <Task <T> > func, TimeSpan expiresIn, CacheDurationType cacheDuration, bool forceUpdate = false) where T : class { var rtnObj = await cache.Get <T>(key); if (rtnObj != null && forceUpdate == false) { return(rtnObj); } var lockOn = LockCache.GetOrAdd(key, () => new AsyncLock()); using (await lockOn.LockAsync(TimeOut.AsyncLockTimeOut)) { rtnObj = await cache.Get <T>(key); if (rtnObj != null && forceUpdate == false) { return(rtnObj); } rtnObj = await func(); await cache.Set(key, rtnObj, expiresIn, cacheDuration); return(rtnObj); } }
public MachineIdConfig(ICacheAsync cacheAsync, SnowflakeOptions options) { this._cacheAsync = cacheAsync; Name = options.Name; _datacenterId = options.DataCenterId; }