Esempio n. 1
0
        private async Task <HttpContent> GetStoredHttpContentAsync(string rowKey, IEnumerable <KeyValuePair <string, IEnumerable <string> > > headers, bool isCompressed, CancellationToken cancellationToken)
        {
            ICloudBlockBlob blob   = _blobContainer.GetBlockBlobReference(rowKey);
            Stream          stream = await blob.OpenReadAsync(cancellationToken);

            if (isCompressed)
            {
                stream = new GZipStream(stream, CompressionMode.Decompress);
            }

            var httpContent = new StreamContent(stream);

            httpContent.Headers.AddRange(headers);
            return(httpContent);
        }
        private async Task <MagickImage> OpenImageAsync(ICloudBlockBlob input, CancellationToken cancellationToken, ILogger logger, Stopwatch sw)
        {
            // Magick.NET doesn't read from the blob stream correctly, so we download the entire blob first to a buffer and read from there.
            // The buffer only exists for a short period in this scope, lessening memory pressure.
            byte[] buffer;
            using (var inputStream = await input.OpenReadAsync(cancellationToken))
            {
                logger.Info("OpenStream: " + sw.ElapsedMilliseconds);
                buffer = new byte[inputStream.Length];
                using (var ms = new MemoryStream(buffer))
                {
                    await inputStream.CopyToAsync(ms, buffer.Length, cancellationToken);
                }

                logger.Info("ReadData: " + sw.ElapsedMilliseconds);
            }

            return(new MagickImage(buffer));
        }