private async Task ResizeAsync(IAssetEntity asset, Stream bodyStream, ResizeOptions resizeOptions, bool overwrite, CancellationToken ct) { var suffix = resizeOptions.ToString(); using (Profiler.Trace("Resize")) { using (var sourceStream = GetTempStream()) { using (var destinationStream = GetTempStream()) { using (Profiler.Trace("ResizeDownload")) { await assetFileStore.DownloadAsync(asset.AppId.Id, asset.Id, asset.FileVersion, null, sourceStream); sourceStream.Position = 0; } using (Profiler.Trace("ResizeImage")) { try { await assetThumbnailGenerator.CreateThumbnailAsync(sourceStream, destinationStream, resizeOptions); destinationStream.Position = 0; } catch { sourceStream.Position = 0; await sourceStream.CopyToAsync(destinationStream); } } try { using (Profiler.Trace("ResizeUpload")) { await assetFileStore.UploadAsync(asset.AppId.Id, asset.Id, asset.FileVersion, suffix, destinationStream, overwrite); destinationStream.Position = 0; } } catch (AssetAlreadyExistsException) { destinationStream.Position = 0; } await destinationStream.CopyToAsync(bodyStream, ct); } } } }