Пример #1
0
        private async Task <MemoryStream> DownloadAndCacheAsync(string url, string filename, string filepath, CancellationToken token, TimeSpan?duration)
        {
            if (duration == null)
            {
                duration = new TimeSpan(30, 0, 0, 0);                 // by default we cache data 30 days
            }
            int headersTimeout = ImageService.Config.HttpHeadersTimeout;
            int readTimeout    = ImageService.Config.HttpReadTimeout - headersTimeout;

            var cancelHeadersToken = new CancellationTokenSource();

            cancelHeadersToken.CancelAfter(TimeSpan.FromSeconds(headersTimeout));
            var linkedHeadersToken = CancellationTokenSource.CreateLinkedTokenSource(token, cancelHeadersToken.Token);

            using (var response = await DownloadHttpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, linkedHeadersToken.Token).ConfigureAwait(false))
            {
                if (!response.IsSuccessStatusCode || response.Content == null)
                {
                    return(null);
                }

                var cancelReadToken = new CancellationTokenSource();
                cancelReadToken.CancelAfter(TimeSpan.FromSeconds(readTimeout));

                var responseBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                var memoryStream = new MemoryStream(responseBytes, false);
                memoryStream.Position = 0;

                _diskCache.AddToSavingQueueIfNotExists(filename, responseBytes, duration.Value);

                return(memoryStream);
            }
        }
Пример #2
0
        private async Task <MemoryStream> DownloadStreamAndCacheAsync(string url, string filename, string filepath, CancellationToken token, TimeSpan?duration)
        {
            var responseBytes = await DownloadAsync(url, filename, filepath, token).ConfigureAwait(false);

            if (responseBytes == null)
            {
                return(null);
            }

            var memoryStream = new MemoryStream(responseBytes, false);

            memoryStream.Position = 0;

            _diskCache.AddToSavingQueueIfNotExists(filename, responseBytes, duration ?? new TimeSpan(30, 0, 0, 0));             // by default we cache data 30 days)
            return(memoryStream);
        }