コード例 #1
0
        private async Task LoadCachedTileImageAsync(Tile tile, Uri uri, string cacheKey)
        {
            var cacheItem = await Cache.GetAsync(cacheKey).ConfigureAwait(false);

            var cacheBuffer = cacheItem?.Buffer;

            if (cacheBuffer == null || cacheItem.Expiration < DateTime.UtcNow)
            {
                var response = await ImageLoader.LoadHttpBufferAsync(uri).ConfigureAwait(false);

                if (response != null)            // download succeeded
                {
                    cacheBuffer = null;          // discard cached image

                    if (response.Buffer != null) // tile image available
                    {
                        await LoadTileImageAsync(tile, response.Buffer).ConfigureAwait(false);

                        await Cache.SetAsync(cacheKey, response.Buffer, GetExpiration(response.MaxAge)).ConfigureAwait(false);
                    }
                }
            }

            if (cacheBuffer != null) // cached image not expired or download failed
            {
                await LoadTileImageAsync(tile, cacheBuffer).ConfigureAwait(false);
            }
        }
コード例 #2
0
        private async Task LoadCachedTileImageAsync(Tile tile, Uri uri, string cacheKey)
        {
            var cacheItem = await Cache.GetAsync(cacheKey);

            var cacheBuffer = cacheItem?.Buffer;

            if (cacheBuffer == null || cacheItem.Expiration < DateTime.UtcNow)
            {
                var result = await ImageLoader.LoadHttpBufferAsync(uri);

                if (result != null)           // download succeeded
                {
                    cacheBuffer = null;       // discard cached image

                    if (result.Item1 != null) // tile image available
                    {
                        await LoadTileImageAsync(tile, result.Item1);

                        await Cache.SetAsync(cacheKey, result.Item1, GetExpiration(result.Item2));
                    }
                }
            }

            if (cacheBuffer != null)
            {
                await LoadTileImageAsync(tile, cacheBuffer);
            }
        }