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); } }
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); } }