public static async Task <GeoTagsEntry> TryToLocateAsync([CanBeNull] string address) { if (string.IsNullOrWhiteSpace(address)) { return(null); } var key = Key + address; if (CacheStorage.Contains(key)) { var cache = CacheStorage.GetPointNullable(key); return(cache.HasValue ? new GeoTagsEntry(cache.Value.X, cache.Value.Y) : null); } try { var result = await YahooApiProvider.LocateAsync(address); if (result.LatitudeValue.HasValue && result.LongitudeValue.HasValue) { Logging.Write($"“{address}”, geo tags: ({result})"); CacheStorage.Set(key, new Point(result.LatitudeValue.Value, result.LongitudeValue.Value)); return(result); } CacheStorage.Set(key, ""); return(null); } catch (WebException e) { Logging.Warning("TryToLocateAsync(): " + e.Message); return(null); } catch (Exception e) { Logging.Warning("TryToLocateAsync(): " + e); CacheStorage.Set(key, ""); return(null); } }