public MetaDataItem[] GetMetaDatas(MetaDataCacheKey key, Func <IEnumerable <MetaDataItem> > factory) { return(this.Values.GetOrAdd( key, _key => new Lazy <MetaDataItem[]>(() => factory().ToArray()) ).Value); }
public async Task <MetaDataItem[]> GetMetaDatas(MetaDataCacheKey key, Func <Task <IEnumerable <MetaDataItem> > > factory) { var value = default(Lazy <MetaDataItem[]>); if (this.Values.TryGetValue(key, out value)) { return(value.Value); } using (await KeyLock.LockAsync(key).ConfigureAwait(false)) { if (this.Values.TryGetValue(key, out value)) { return(value.Value); } var metaDataItems = await factory().ConfigureAwait(false); return(this.Values.GetOrAdd(key, _key => new Lazy <MetaDataItem[]>(() => metaDataItems.ToArray())).Value); } }
public Task <MetaDataItem[]> GetMetaDatasAsync(LibraryHierarchyNode libraryHierarchyNode, MetaDataItemType?metaDataItemType, string metaDataItemName) { var key = new MetaDataCacheKey(libraryHierarchyNode, metaDataItemType, metaDataItemName, this.LibraryHierarchyBrowser.Filter); return(this.MetaDataCache.GetMetaDatas(key, () => this.GetMetaDatasCoreAsync(libraryHierarchyNode, metaDataItemType, metaDataItemName))); }
public Task <MetaDataItem[]> GetMetaDatasAsync(IEnumerable <PlaylistItem> playlistItems, MetaDataItemType?metaDataItemType, string metaDataItemName) { var key = new MetaDataCacheKey(playlistItems.ToArray(), metaDataItemType, metaDataItemName, this.LibraryHierarchyBrowser.Filter); return(this.MetaDataCache.GetMetaDatas(key, () => this.GetMetaDatasCoreAsync(playlistItems, metaDataItemType, metaDataItemName))); }
public void Evict(MetaDataCacheKey key) { Logger.Write(this, LogLevel.Debug, "Evicting cache entry: {0}", key); this.Values.TryRemove(key); }