示例#1
0
 public MetaDataItem[] GetMetaDatas(MetaDataCacheKey key, Func <IEnumerable <MetaDataItem> > factory)
 {
     return(this.Values.GetOrAdd(
                key,
                _key => new Lazy <MetaDataItem[]>(() => factory().ToArray())
                ).Value);
 }
示例#2
0
        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);
            }
        }
示例#3
0
        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)));
        }
示例#4
0
        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)));
        }
示例#5
0
 public void Evict(MetaDataCacheKey key)
 {
     Logger.Write(this, LogLevel.Debug, "Evicting cache entry: {0}", key);
     this.Values.TryRemove(key);
 }