private async Task <List <T> > GetNormalizedData <T>(string runId, string fileName, int startIndex, int count) { var stream = await FileStreamFactory.GetStreamAsync(Configuration, runId, fileName); if (stream == null) { return(new List <T>()); } using (stream) { bool isRecordBad = false; var csvConfig = new Configuration { Delimiter = ",", TrimOptions = TrimOptions.Trim, IgnoreBlankLines = true, IgnoreQuotes = false, BadDataFound = (a) => { isRecordBad = true; } }; csvConfig.TypeConverterCache.AddConverter <DateTime?>(new DMYDateConverter()); var currIndex = 0; var results = new List <T>(); using (var reader = new CsvReader(new CsvParser(new StreamReader(stream), csvConfig))) { while (reader.Read()) { if (!isRecordBad) { if (currIndex >= startIndex + count) { break; } if (currIndex >= startIndex) { results.Add(reader.GetRecord <T>()); } else if (currIndex == 0) { reader.GetRecord <T>(); //If we don't read the first record, CSVHelper errors } currIndex++; } isRecordBad = false; } } return(results); } }