private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey) { var cacheItem = await Cache.GetAsync(cacheKey); var cacheBuffer = cacheItem?.Buffer; var loaded = false; if (cacheBuffer == null || cacheItem.Expiration < DateTime.UtcNow) { try { loaded = await ImageLoader.LoadHttpTileImageAsync(uri, async (buffer, maxAge) => { await SetTileImageAsync(tile, buffer); // create BitmapImage before caching await Cache.SetAsync(cacheKey, buffer, GetExpiration(maxAge)); }); } catch (Exception ex) { Debug.WriteLine("TileImageLoader: {0}: {1}", uri, ex.Message); } } if (!loaded && cacheBuffer != null) // keep expired image if download failed { await SetTileImageAsync(tile, cacheBuffer); } }
private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey) { DateTime expiration; var buffer = GetCachedImage(cacheKey, out expiration); var loaded = false; if (buffer == null || expiration < DateTime.UtcNow) { try { loaded = await ImageLoader.LoadHttpTileImageAsync(uri, async (stream, maxAge) => { await SetTileImageAsync(tile, stream); // create BitmapFrame before caching SetCachedImage(cacheKey, stream, GetExpiration(maxAge)); }); } catch (Exception ex) { Debug.WriteLine("TileImageLoader: {0}: {1}", uri, ex.Message); } } if (!loaded && buffer != null) // keep expired image if download failed { using (var stream = new MemoryStream(buffer)) { await SetTileImageAsync(tile, stream); } } }