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 --- .../Net/Handlers/BaseEmbeddedResourceHandler.cs | 35 +------------- MediaBrowser.Common/Net/Handlers/BaseHandler.cs | 14 +++--- .../Net/Handlers/BaseJsonHandler.cs | 11 ++--- .../Net/Handlers/StaticFileHandler.cs | 55 ++++++++++------------ 4 files changed, 39 insertions(+), 76 deletions(-) (limited to 'MediaBrowser.Common/Net') diff --git a/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs index a8c7090f7..9d9e2a0e0 100644 --- a/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs @@ -1,5 +1,4 @@ -using System; -using System.IO; +using System.IO; using System.Threading.Tasks; namespace MediaBrowser.Common.Net.Handlers @@ -16,37 +15,7 @@ namespace MediaBrowser.Common.Net.Handlers public override Task GetContentType() { - return Task.Run(() => - { - string extension = Path.GetExtension(ResourcePath); - - if (extension.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase) || extension.EndsWith("jpg", StringComparison.OrdinalIgnoreCase)) - { - return "image/jpeg"; - } - else if (extension.EndsWith("png", StringComparison.OrdinalIgnoreCase)) - { - return "image/png"; - } - else if (extension.EndsWith("ico", StringComparison.OrdinalIgnoreCase)) - { - return "image/ico"; - } - else if (extension.EndsWith("js", StringComparison.OrdinalIgnoreCase)) - { - return "application/x-javascript"; - } - else if (extension.EndsWith("css", StringComparison.OrdinalIgnoreCase)) - { - return "text/css"; - } - else if (extension.EndsWith("html", StringComparison.OrdinalIgnoreCase)) - { - return "text/html; charset=utf-8"; - } - - return "text/plain; charset=utf-8"; - }); + return Task.FromResult(MimeTypes.GetMimeType(ResourcePath)); } protected override Task WriteResponseToOutputStream(Stream stream) diff --git a/MediaBrowser.Common/Net/Handlers/BaseHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseHandler.cs index 7a4efdaf2..19a1e7af7 100644 --- a/MediaBrowser.Common/Net/Handlers/BaseHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/BaseHandler.cs @@ -185,11 +185,11 @@ namespace MediaBrowser.Common.Net.Handlers // When serving a range request, we need to return status code 206 to indicate a partial response body StatusCode = SupportsByteRangeRequests && IsRangeRequest ? 206 : 200; - ctx.Response.ContentType = await GetContentType(); + ctx.Response.ContentType = await GetContentType().ConfigureAwait(false); TimeSpan cacheDuration = CacheDuration; - DateTime? lastDateModified = await GetLastDateModified(); + DateTime? lastDateModified = await GetLastDateModified().ConfigureAwait(false); if (ctx.Request.Headers.AllKeys.Contains("If-Modified-Since")) { @@ -205,13 +205,13 @@ namespace MediaBrowser.Common.Net.Handlers } } - await PrepareResponse(); + await PrepareResponse().ConfigureAwait(false); if (IsResponseValid) { bool compressResponse = ShouldCompressResponse(ctx.Response.ContentType) && ClientSupportsCompression; - await ProcessUncachedRequest(ctx, compressResponse, cacheDuration, lastDateModified); + await ProcessUncachedRequest(ctx, compressResponse, cacheDuration, lastDateModified).ConfigureAwait(false); } else { @@ -285,7 +285,7 @@ namespace MediaBrowser.Common.Net.Handlers outputStream = CompressedStream; } - await WriteResponseToOutputStream(outputStream); + await WriteResponseToOutputStream(outputStream).ConfigureAwait(false); } else { @@ -307,7 +307,7 @@ namespace MediaBrowser.Common.Net.Handlers /// protected virtual Task PrepareResponse() { - return Task.Run(() => { }); + return Task.FromResult(null); } protected abstract Task WriteResponseToOutputStream(Stream stream); @@ -359,7 +359,7 @@ namespace MediaBrowser.Common.Net.Handlers { DateTime? value = null; - return Task.Run(() => { return value; }); + return Task.FromResult(value); } private bool IsResponseValid diff --git a/MediaBrowser.Common/Net/Handlers/BaseJsonHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseJsonHandler.cs index a3a47a4a3..650853537 100644 --- a/MediaBrowser.Common/Net/Handlers/BaseJsonHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/BaseJsonHandler.cs @@ -8,10 +8,7 @@ namespace MediaBrowser.Common.Net.Handlers { public override Task GetContentType() { - return Task.Run(() => - { - return MimeTypes.JsonMimeType; - }); + return Task.FromResult(MimeTypes.JsonMimeType); } private bool _ObjectToSerializeEnsured = false; @@ -21,7 +18,7 @@ namespace MediaBrowser.Common.Net.Handlers { if (!_ObjectToSerializeEnsured) { - _ObjectToSerialize = await GetObjectToSerialize(); + _ObjectToSerialize = await GetObjectToSerialize().ConfigureAwait(false); if (_ObjectToSerialize == null) { @@ -34,9 +31,9 @@ namespace MediaBrowser.Common.Net.Handlers protected abstract Task GetObjectToSerialize(); - protected override async Task PrepareResponse() + protected override Task PrepareResponse() { - await EnsureObjectToSerialize(); + return EnsureObjectToSerialize(); } protected async override Task WriteResponseToOutputStream(Stream stream) diff --git a/MediaBrowser.Common/Net/Handlers/StaticFileHandler.cs b/MediaBrowser.Common/Net/Handlers/StaticFileHandler.cs index d8971dd97..799abea9b 100644 --- a/MediaBrowser.Common/Net/Handlers/StaticFileHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/StaticFileHandler.cs @@ -102,33 +102,30 @@ namespace MediaBrowser.Common.Net.Handlers protected override Task GetLastDateModified() { - return Task.Run(() => - { - EnsureSourceStream(); + DateTime? value = null; - if (SourceStream == null) - { - return null; - } + EnsureSourceStream(); - return File.GetLastWriteTime(Path); - }); + if (SourceStream != null) + { + value = File.GetLastWriteTime(Path); + } + + return Task.FromResult(value); } public override Task GetContentType() { - return Task.Run(() => - { - return MimeTypes.GetMimeType(Path); - }); + return Task.FromResult(MimeTypes.GetMimeType(Path)); } protected override Task PrepareResponse() { - return Task.Run(() => { EnsureSourceStream(); }); + EnsureSourceStream(); + return Task.FromResult(null); } - protected async override Task WriteResponseToOutputStream(Stream stream) + protected override Task WriteResponseToOutputStream(Stream stream) { if (IsRangeRequest) { @@ -137,22 +134,22 @@ namespace MediaBrowser.Common.Net.Handlers // If the requested range is "0-" and we know the total length, we can optimize by avoiding having to buffer the content into memory if (requestedRange.Value == null && TotalContentLength != null) { - await ServeCompleteRangeRequest(requestedRange, stream); + return ServeCompleteRangeRequest(requestedRange, stream); } else if (TotalContentLength.HasValue) { // This will have to buffer a portion of the content into memory - await ServePartialRangeRequestWithKnownTotalContentLength(requestedRange, stream); + return ServePartialRangeRequestWithKnownTotalContentLength(requestedRange, stream); } else { // This will have to buffer the entire content into memory - await ServePartialRangeRequestWithUnknownTotalContentLength(requestedRange, stream); + return ServePartialRangeRequestWithUnknownTotalContentLength(requestedRange, stream); } } else { - await SourceStream.CopyToAsync(stream); + return SourceStream.CopyToAsync(stream); } } @@ -170,7 +167,7 @@ namespace MediaBrowser.Common.Net.Handlers /// Handles a range request of "bytes=0-" /// This will serve the complete content and add the content-range header /// - private async Task ServeCompleteRangeRequest(KeyValuePair requestedRange, Stream responseStream) + private Task ServeCompleteRangeRequest(KeyValuePair requestedRange, Stream responseStream) { long totalContentLength = TotalContentLength.Value; @@ -187,7 +184,7 @@ namespace MediaBrowser.Common.Net.Handlers SourceStream.Position = rangeStart; } - await SourceStream.CopyToAsync(responseStream); + return SourceStream.CopyToAsync(responseStream); } /// @@ -196,7 +193,7 @@ namespace MediaBrowser.Common.Net.Handlers private async Task ServePartialRangeRequestWithUnknownTotalContentLength(KeyValuePair requestedRange, Stream responseStream) { // Read the entire stream so that we can determine the length - byte[] bytes = await ReadBytes(SourceStream, 0, null); + byte[] bytes = await ReadBytes(SourceStream, 0, null).ConfigureAwait(false); long totalContentLength = bytes.LongLength; @@ -208,7 +205,7 @@ namespace MediaBrowser.Common.Net.Handlers HttpListenerContext.Response.ContentLength64 = rangeLength; HttpListenerContext.Response.Headers["Content-Range"] = string.Format("bytes {0}-{1}/{2}", rangeStart, rangeEnd, totalContentLength); - await responseStream.WriteAsync(bytes, Convert.ToInt32(rangeStart), Convert.ToInt32(rangeLength)); + await responseStream.WriteAsync(bytes, Convert.ToInt32(rangeStart), Convert.ToInt32(rangeLength)).ConfigureAwait(false); } /// @@ -222,14 +219,14 @@ namespace MediaBrowser.Common.Net.Handlers long rangeLength = 1 + rangeEnd - rangeStart; // Only read the bytes we need - byte[] bytes = await ReadBytes(SourceStream, Convert.ToInt32(rangeStart), Convert.ToInt32(rangeLength)); + byte[] bytes = await ReadBytes(SourceStream, Convert.ToInt32(rangeStart), Convert.ToInt32(rangeLength)).ConfigureAwait(false); // Content-Length is the length of what we're serving, not the original content HttpListenerContext.Response.ContentLength64 = rangeLength; HttpListenerContext.Response.Headers["Content-Range"] = string.Format("bytes {0}-{1}/{2}", rangeStart, rangeEnd, totalContentLength); - await responseStream.WriteAsync(bytes, 0, Convert.ToInt32(rangeLength)); + await responseStream.WriteAsync(bytes, 0, Convert.ToInt32(rangeLength)).ConfigureAwait(false); } /// @@ -252,9 +249,9 @@ namespace MediaBrowser.Common.Net.Handlers using (MemoryStream ms = new MemoryStream()) { int read; - while ((read = await input.ReadAsync(buffer, 0, buffer.Length)) > 0) + while ((read = await input.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false)) > 0) { - await ms.WriteAsync(buffer, 0, read); + await ms.WriteAsync(buffer, 0, read).ConfigureAwait(false); } return ms.ToArray(); } @@ -265,9 +262,9 @@ namespace MediaBrowser.Common.Net.Handlers using (MemoryStream ms = new MemoryStream()) { - int read = await input.ReadAsync(buffer, 0, buffer.Length); + int read = await input.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); - await ms.WriteAsync(buffer, 0, read); + await ms.WriteAsync(buffer, 0, read).ConfigureAwait(false); return ms.ToArray(); } -- cgit v1.2.3