private async Task <List <List <DataValuesModel> > > AllHistory(string energySource) { // Retrieve config values string energySourceMPAN = _config.GetValue <string>($"OctopusApi:{energySource}:mpan"); string energySourceSerialNumber = _config.GetValue <string>($"OctopusApi:{energySource}:serial_number"); // Call api to retrieve count or records to retrieve ApiModel tempUse = await _octopusHelper.GetConsumption(energySource, energySourceMPAN, energySourceSerialNumber); DataSourcesModel energySourceModel = await _dataSources.GetDataSourceIdFromName(energySource); double energySourcePages = Math.Ceiling(tempUse.Count / 100d); List <List <DataValuesModel> > energySourceHistory = new List <List <DataValuesModel> >(); List <Task <ApiModel> > tasks = new List <Task <ApiModel> >(); for (int page = 1; page < (energySourcePages + 1); page++) { tasks.Add(_octopusHelper.GetConsumptionPage(energySource, page, energySourceMPAN, energySourceSerialNumber)); } var results = await Task.WhenAll(tasks); int countOfRetrievedRecords = 0; foreach (var item in results) { List <DataValuesModel> tempList = MapApiToDatabase(item, energySourceModel); countOfRetrievedRecords += tempList.Count; energySourceHistory.Add(tempList); } if (tempUse.Count == countOfRetrievedRecords) { return(energySourceHistory); } else { // TODO: Find a more elegant way to handle the error throw new Exception(); } }