a few more async optimizations

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti
2012-08-21 22:50:59 -04:00
parent 1c5f728ec2
commit fbf8cc833c
37 changed files with 249 additions and 311 deletions

View File

@@ -92,10 +92,7 @@ namespace MediaBrowser.Api.HttpHandlers
public override Task<string> GetContentType()
{
return Task.Run(() =>
{
return MimeTypes.GetMimeType("." + GetConversionOutputFormat());
});
return Task.FromResult<string>(MimeTypes.GetMimeType("." + GetConversionOutputFormat()));
}
public override bool ShouldCompressResponse(string contentType)
@@ -103,17 +100,17 @@ namespace MediaBrowser.Api.HttpHandlers
return false;
}
public override async Task ProcessRequest(HttpListenerContext ctx)
public override Task ProcessRequest(HttpListenerContext ctx)
{
HttpListenerContext = ctx;
if (!RequiresConversion())
{
await new StaticFileHandler() { Path = LibraryItem.Path }.ProcessRequest(ctx);
return new StaticFileHandler() { Path = LibraryItem.Path }.ProcessRequest(ctx);
}
else
{
await base.ProcessRequest(ctx);
return base.ProcessRequest(ctx);
}
}
@@ -180,15 +177,15 @@ namespace MediaBrowser.Api.HttpHandlers
// If we ever decide to disable the ffmpeg log then you must uncomment the below line.
//process.BeginErrorReadLine();
Task debugLogTask = Task.Run(async () => { await process.StandardError.BaseStream.CopyToAsync(logStream); });
Task debugLogTask = process.StandardError.BaseStream.CopyToAsync(logStream);
await process.StandardOutput.BaseStream.CopyToAsync(stream);
await process.StandardOutput.BaseStream.CopyToAsync(stream).ConfigureAwait(false);
process.WaitForExit();
Logger.LogInfo("FFMpeg exited with code " + process.ExitCode);
await debugLogTask;
await debugLogTask.ConfigureAwait(false);
}
catch (Exception ex)
{

View File

@@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class GenreHandler : BaseJsonHandler<IBNItem<Genre>>
{
protected override async Task<IBNItem<Genre>> GetObjectToSerialize()
protected override Task<IBNItem<Genre>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers
string name = QueryString["name"];
return await GetGenre(parent, user, name);
return GetGenre(parent, user, name);
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Genre>()
{
Item = await Kernel.Instance.ItemController.GetGenre(name),
Item = await Kernel.Instance.ItemController.GetGenre(name).ConfigureAwait(false),
BaseItemCount = count
};
}

View File

@@ -11,13 +11,13 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class GenresHandler : BaseJsonHandler<IEnumerable<IBNItem<Genre>>>
{
protected override async Task<IEnumerable<IBNItem<Genre>>> GetObjectToSerialize()
protected override Task<IEnumerable<IBNItem<Genre>>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
return await GetAllGenres(parent, user);
return GetAllGenres(parent, user);
}
/// <summary>
@@ -53,7 +53,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
IEnumerable<Genre> entities = await Task.WhenAll<Genre>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); }));
IEnumerable<Genre> entities = await Task.WhenAll<Genre>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetGenre(key); })).ConfigureAwait(false);
return entities.Select(e => new IBNItem<Genre>() { Item = e, BaseItemCount = data[e.Name] });
}

View File

@@ -29,28 +29,28 @@ namespace MediaBrowser.Api.HttpHandlers
if (!string.IsNullOrEmpty(personName))
{
return (await Kernel.Instance.ItemController.GetPerson(personName)).PrimaryImagePath;
return (await Kernel.Instance.ItemController.GetPerson(personName).ConfigureAwait(false)).PrimaryImagePath;
}
string genreName = QueryString["genre"];
if (!string.IsNullOrEmpty(genreName))
{
return (await Kernel.Instance.ItemController.GetGenre(genreName)).PrimaryImagePath;
return (await Kernel.Instance.ItemController.GetGenre(genreName).ConfigureAwait(false)).PrimaryImagePath;
}
string year = QueryString["year"];
if (!string.IsNullOrEmpty(year))
{
return (await Kernel.Instance.ItemController.GetYear(int.Parse(year))).PrimaryImagePath;
return (await Kernel.Instance.ItemController.GetYear(int.Parse(year)).ConfigureAwait(false)).PrimaryImagePath;
}
string studio = QueryString["studio"];
if (!string.IsNullOrEmpty(studio))
{
return (await Kernel.Instance.ItemController.GetStudio(studio)).PrimaryImagePath;
return (await Kernel.Instance.ItemController.GetStudio(studio).ConfigureAwait(false)).PrimaryImagePath;
}
BaseItem item = ApiService.GetItemById(QueryString["id"]);
@@ -64,7 +64,7 @@ namespace MediaBrowser.Api.HttpHandlers
private Stream _SourceStream = null;
private async Task<Stream> GetSourceStream()
{
await EnsureSourceStream();
await EnsureSourceStream().ConfigureAwait(false);
return _SourceStream;
}
@@ -75,7 +75,7 @@ namespace MediaBrowser.Api.HttpHandlers
{
try
{
_SourceStream = File.OpenRead(await GetImagePath());
_SourceStream = File.OpenRead(await GetImagePath().ConfigureAwait(false));
}
catch (FileNotFoundException ex)
{
@@ -101,14 +101,14 @@ namespace MediaBrowser.Api.HttpHandlers
public async override Task<string> GetContentType()
{
await EnsureSourceStream();
await EnsureSourceStream().ConfigureAwait(false);
if (await GetSourceStream() == null)
if (await GetSourceStream().ConfigureAwait(false) == null)
{
return null;
}
return MimeTypes.GetMimeType(await GetImagePath());
return MimeTypes.GetMimeType(await GetImagePath().ConfigureAwait(false));
}
public override TimeSpan CacheDuration
@@ -121,14 +121,14 @@ namespace MediaBrowser.Api.HttpHandlers
protected async override Task<DateTime?> GetLastDateModified()
{
await EnsureSourceStream();
await EnsureSourceStream().ConfigureAwait(false);
if (await GetSourceStream() == null)
if (await GetSourceStream().ConfigureAwait(false) == null)
{
return null;
}
return File.GetLastWriteTime(await GetImagePath());
return File.GetLastWriteTime(await GetImagePath().ConfigureAwait(false));
}
private int? Height
@@ -223,7 +223,7 @@ namespace MediaBrowser.Api.HttpHandlers
protected override async Task WriteResponseToOutputStream(Stream stream)
{
ImageProcessor.ProcessImage(await GetSourceStream(), stream, Width, Height, MaxWidth, MaxHeight, Quality);
ImageProcessor.ProcessImage(await GetSourceStream().ConfigureAwait(false), stream, Width, Height, MaxWidth, MaxHeight, Quality);
}
private string GetImagePathFromTypes(BaseItem item, ImageType imageType, int imageIndex)

View File

@@ -10,7 +10,7 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class ItemHandler : BaseJsonHandler<DTOBaseItem>
{
protected async override Task<DTOBaseItem> GetObjectToSerialize()
protected override Task<DTOBaseItem> GetObjectToSerialize()
{
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers
return null;
}
return await ApiService.GetDTOBaseItem(item, user);
return ApiService.GetDTOBaseItem(item, user);
}
protected virtual BaseItem ItemToSerialize

View File

@@ -9,13 +9,13 @@ using MediaBrowser.Model.Entities;
namespace MediaBrowser.Api.HttpHandlers
{
public class ItemListHandler : BaseJsonHandler<IEnumerable<DTOBaseItem>>
public class ItemListHandler : BaseJsonHandler<DTOBaseItem[]>
{
protected override async Task<IEnumerable<DTOBaseItem>> GetObjectToSerialize()
protected override Task<DTOBaseItem[]> GetObjectToSerialize()
{
User user = Kernel.Instance.Users.First(u => u.Id == UserId);
return await Task.WhenAll<DTOBaseItem>(ItemsToSerialize.Select(i =>
return Task.WhenAll<DTOBaseItem>(ItemsToSerialize.Select(i =>
{
return ApiService.GetDTOBaseItem(i, user, includeChildren: false, includePeople: false);
}));

View File

@@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class PersonHandler : BaseJsonHandler<IBNItem<Person>>
{
protected async override Task<IBNItem<Person>> GetObjectToSerialize()
protected override Task<IBNItem<Person>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers
string name = QueryString["name"];
return await GetPerson(parent, user, name);
return GetPerson(parent, user, name);
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Person>()
{
Item = await Kernel.Instance.ItemController.GetPerson(name),
Item = await Kernel.Instance.ItemController.GetPerson(name).ConfigureAwait(false),
BaseItemCount = count
};
}

View File

@@ -11,12 +11,11 @@ namespace MediaBrowser.Api.HttpHandlers
{
protected override Task<BasePluginConfiguration> GetObjectToSerialize()
{
return Task.Run(() =>
{
string pluginName = QueryString["name"];
string pluginName = QueryString["name"];
return Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
});
BasePluginConfiguration config = Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
return Task.FromResult<BasePluginConfiguration>(config);
}
}
}

View File

@@ -14,27 +14,24 @@ namespace MediaBrowser.Api.HttpHandlers
{
protected override Task<IEnumerable<PluginInfo>> GetObjectToSerialize()
{
return Task.Run(() =>
var plugins = Kernel.Instance.Plugins.Select(p =>
{
var plugins = Kernel.Instance.Plugins.Select(p =>
return new PluginInfo()
{
return new PluginInfo()
{
Path = p.Path,
Name = p.Name,
Enabled = p.Enabled,
DownloadToUI = p.DownloadToUI,
Version = p.Version
};
});
if (QueryString["uionly"] == "1")
{
plugins = plugins.Where(p => p.DownloadToUI);
}
return plugins;
Path = p.Path,
Name = p.Name,
Enabled = p.Enabled,
DownloadToUI = p.DownloadToUI,
Version = p.Version
};
});
if (QueryString["uionly"] == "1")
{
plugins = plugins.Where(p => p.DownloadToUI);
}
return Task.FromResult<IEnumerable<PluginInfo>>(plugins);
}
}
}

View File

@@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class StudioHandler : BaseJsonHandler<IBNItem<Studio>>
{
protected async override Task<IBNItem<Studio>> GetObjectToSerialize()
protected override Task<IBNItem<Studio>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers
string name = QueryString["name"];
return await GetStudio(parent, user, name);
return GetStudio(parent, user, name);
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Studio>()
{
Item = await Kernel.Instance.ItemController.GetStudio(name),
Item = await Kernel.Instance.ItemController.GetStudio(name).ConfigureAwait(false),
BaseItemCount = count
};
}

View File

@@ -11,13 +11,13 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class StudiosHandler : BaseJsonHandler<IEnumerable<IBNItem<Studio>>>
{
protected override async Task<IEnumerable<IBNItem<Studio>>> GetObjectToSerialize()
protected override Task<IEnumerable<IBNItem<Studio>>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
return await GetAllStudios(parent, user);
return GetAllStudios(parent, user);
}
/// <summary>
@@ -53,7 +53,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
IEnumerable<Studio> entities = await Task.WhenAll<Studio>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); }));
IEnumerable<Studio> entities = await Task.WhenAll<Studio>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetStudio(key); })).ConfigureAwait(false);
return entities.Select(e => new IBNItem<Studio>() { Item = e, BaseItemCount = data[e.Name] });
}

View File

@@ -10,10 +10,7 @@ namespace MediaBrowser.Api.HttpHandlers
{
protected override Task<IEnumerable<User>> GetObjectToSerialize()
{
return Task.Run(() =>
{
return Kernel.Instance.Users;
});
return Task.FromResult<IEnumerable<User>>(Kernel.Instance.Users);
}
}
}

View File

@@ -14,7 +14,7 @@ namespace MediaBrowser.Api.HttpHandlers
/// </summary>
public class YearHandler : BaseJsonHandler<IBNItem<Year>>
{
protected override async Task<IBNItem<Year>> GetObjectToSerialize()
protected override Task<IBNItem<Year>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
@@ -22,7 +22,7 @@ namespace MediaBrowser.Api.HttpHandlers
string year = QueryString["year"];
return await GetYear(parent, user, int.Parse(year));
return GetYear(parent, user, int.Parse(year));
}
/// <summary>
@@ -46,7 +46,7 @@ namespace MediaBrowser.Api.HttpHandlers
// Get the original entity so that we can also supply the PrimaryImagePath
return new IBNItem<Year>()
{
Item = await Kernel.Instance.ItemController.GetYear(year),
Item = await Kernel.Instance.ItemController.GetYear(year).ConfigureAwait(false),
BaseItemCount = count
};
}

View File

@@ -11,13 +11,13 @@ namespace MediaBrowser.Api.HttpHandlers
{
public class YearsHandler : BaseJsonHandler<IEnumerable<IBNItem<Year>>>
{
protected override async Task<IEnumerable<IBNItem<Year>>> GetObjectToSerialize()
protected override Task<IEnumerable<IBNItem<Year>>> GetObjectToSerialize()
{
Folder parent = ApiService.GetItemById(QueryString["id"]) as Folder;
Guid userId = Guid.Parse(QueryString["userid"]);
User user = Kernel.Instance.Users.First(u => u.Id == userId);
return await GetAllYears(parent, user);
return GetAllYears(parent, user);
}
/// <summary>
@@ -50,7 +50,7 @@ namespace MediaBrowser.Api.HttpHandlers
}
}
IEnumerable<Year> entities = await Task.WhenAll<Year>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); }));
IEnumerable<Year> entities = await Task.WhenAll<Year>(data.Keys.Select(key => { return Kernel.Instance.ItemController.GetYear(key); })).ConfigureAwait(false);
return entities.Select(e => new IBNItem<Year>() { Item = e, BaseItemCount = data[int.Parse(e.Name)] });
}