private async Task <byte[]> ProcessAndPutToCacheAsync(CachedImageResult cachedImage, byte[] buffer, ProcessImageQuery query) { if (!query.NeedsProcessing()) { await _imageCache.PutAsync(cachedImage, buffer); return(buffer); } else { var processQuery = new ProcessImageQuery(query) { Source = buffer, Format = query.Format ?? cachedImage.Extension, FileName = cachedImage.FileName, DisposeSource = true }; using (var result = _imageProcessor.ProcessImage(processQuery)) { var outBuffer = result.OutputStream.GetBuffer(); await _imageCache.PutAsync(cachedImage, outBuffer); if (cachedImage.Extension != result.FileExtension) { cachedImage.Path = Path.ChangeExtension(cachedImage.Path, result.FileExtension); cachedImage.Extension = result.FileExtension; } Logger.DebugFormat($"Processed image '{cachedImage.FileName}' in {result.ProcessTimeMs} ms.", null); return(outBuffer); } } }