public static async Task <BarDataModel> RequestBarsAroundCoords(double latitude, double longitude, double radius) { var result = new BarDataModel(); var failedToConnectCounter = 0; var providerCount = _providerList.Count; foreach (IBeerable provider in _providerList) { try { var barsFromProvider = await CollectBarsFromProvider(provider, latitude, longitude, radius); if (barsFromProvider != null) { result.AddRange(barsFromProvider); } } catch (HttpRequestException) { if (++failedToConnectCounter == providerCount) { throw; } } catch (WebException) { Console.Write("Provider \"{0}\" is down\n", provider.ProviderName); // Provider is down, lets just ignore it } } var dbManager = new DatabaseManager(); dbManager.SaveBars(result); result.AddRange(dbManager.GetAllBarData(result.Select(x => x.BarId))); result.RemoveBarsOutsideRadius(radius); result.RemoveDuplicates(); return(result); }