From fbf8cc833c441de8890998600be044296acfc783 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Tue, 21 Aug 2012 22:50:59 -0400 Subject: a few more async optimizations --- MediaBrowser.Controller/Library/ItemController.cs | 54 ++++++++++------------- 1 file changed, 23 insertions(+), 31 deletions(-) (limited to 'MediaBrowser.Controller/Library/ItemController.cs') diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index 9fd77fb0d..f182f43f0 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -116,14 +116,17 @@ namespace MediaBrowser.Controller.Library if (item != null) { - await Kernel.Instance.ExecuteMetadataProviders(item, args); + await Kernel.Instance.ExecuteMetadataProviders(item, args).ConfigureAwait(false); - var folder = item as Folder; - - if (folder != null) + if (item.IsFolder) { // If it's a folder look for child entities - await AttachChildren(folder, fileSystemChildren).ConfigureAwait(false); + (item as Folder).Children = (await Task.WhenAll(GetChildren(item as Folder, fileSystemChildren)).ConfigureAwait(false)) + .Where(i => i != null).OrderBy(f => + { + return string.IsNullOrEmpty(f.SortName) ? f.Name : f.SortName; + + }); } } @@ -133,27 +136,18 @@ namespace MediaBrowser.Controller.Library /// /// Finds child BaseItems for a given Folder /// - private async Task AttachChildren(Folder folder, LazyFileInfo[] fileSystemChildren) + private Task[] GetChildren(Folder folder, LazyFileInfo[] fileSystemChildren) { - int count = fileSystemChildren.Length; - - Task[] tasks = new Task[count]; + Task[] tasks = new Task[fileSystemChildren.Length]; - for (int i = 0; i < count; i++) + for (int i = 0; i < fileSystemChildren.Length; i++) { var child = fileSystemChildren[i]; tasks[i] = GetItem(child.Path, folder, child.FileInfo); } - BaseItem[] baseItemChildren = await Task.WhenAll(tasks).ConfigureAwait(false); - - // Sort them - folder.Children = baseItemChildren.Where(i => i != null).OrderBy(f => - { - return string.IsNullOrEmpty(f.SortName) ? f.Name : f.SortName; - - }); + return tasks; } /// @@ -216,41 +210,41 @@ namespace MediaBrowser.Controller.Library /// /// Gets a Person /// - public async Task GetPerson(string name) + public Task GetPerson(string name) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.PeoplePath, name); - return await GetImagesByNameItem(path, name).ConfigureAwait(false); + return GetImagesByNameItem(path, name); } /// /// Gets a Studio /// - public async Task GetStudio(string name) + public Task GetStudio(string name) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.StudioPath, name); - return await GetImagesByNameItem(path, name).ConfigureAwait(false); + return GetImagesByNameItem(path, name); } /// /// Gets a Genre /// - public async Task GetGenre(string name) + public Task GetGenre(string name) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.GenrePath, name); - return await GetImagesByNameItem(path, name).ConfigureAwait(false); + return GetImagesByNameItem(path, name); } /// /// Gets a Year /// - public async Task GetYear(int value) + public Task GetYear(int value) { string path = Path.Combine(Kernel.Instance.ApplicationPaths.YearPath, value.ToString()); - return await GetImagesByNameItem(path, value.ToString()).ConfigureAwait(false); + return GetImagesByNameItem(path, value.ToString()); } private ConcurrentDictionary ImagesByNameItemCache = new ConcurrentDictionary(); @@ -258,7 +252,7 @@ namespace MediaBrowser.Controller.Library /// /// Generically retrieves an IBN item /// - private async Task GetImagesByNameItem(string path, string name) + private Task GetImagesByNameItem(string path, string name) where T : BaseEntity, new() { string key = path.ToLower(); @@ -266,12 +260,10 @@ namespace MediaBrowser.Controller.Library // Look for it in the cache, if it's not there, create it if (!ImagesByNameItemCache.ContainsKey(key)) { - T obj = await CreateImagesByNameItem(path, name).ConfigureAwait(false); - ImagesByNameItemCache[key] = obj; - return obj; + ImagesByNameItemCache[key] = CreateImagesByNameItem(path, name); } - return ImagesByNameItemCache[key] as T; + return ImagesByNameItemCache[key] as Task; } /// -- cgit v1.2.3