public async Task <ResultsLoadBankData[]> LoadAndSave() { var items = providers.Banks().Select(it => new KeyValuePair <string, ResultsLoadBankData>(it, new ResultsLoadBankData() { Bank = it, ErrorMessage = "error loading", HasSuccess = false, NrRecordsSaved = 0, NrRecordsLoaded = -1 }) );; var lst = new Dictionary <string, ResultsLoadBankData>(items); var rates = providers.LoadExchange() .Select(it => it.GetActualRates()) .ToArray(); //TODO: how to load async all async enumerables? //TODO: how to report error if one fails? var allRates = new List <ExchangeRates>(); foreach (var rateAsync in rates) { try { var ratesBank = await rateAsync; allRates.AddRange(ratesBank); } catch (Exception) { } } var groups = allRates.GroupBy(it => it.Bank).ToDictionary(it => it.Key, it => it.ToArray()); foreach (var bank in groups.Keys) { var item = lst[bank]; item.HasSuccess = true; item.ErrorMessage = null; item.NrRecordsLoaded = groups[bank].Length; item.NrRecordsSaved = 0; foreach (var rate in groups[bank]) { try { if (await ret.Exists(rate)) { continue; } var nr = await save.Save(rate); item.NrRecordsSaved++; } catch (Exception ex) { //TODO:log item.ErrorMessage = ex.Message; item.HasSuccess = false; } } } return(lst.Values.ToArray()); }
public IEnumerable <string> Banks() { return(_prov.Banks()); }