CsvReader.Read/CsvReader.ReadAsync дублирует данныеC#

Место общения программистов C#
Ответить
Гость
 CsvReader.Read/CsvReader.ReadAsync дублирует данные

Сообщение Гость »

Внутри действия в устойчивых функциях Azure у меня есть метод, который считывает файл Csv из определенного индекса. Целью этого метода является чтение 2000 строк файла или до последней строки, начиная с указанного индекса.
Для файлов размером более 2000 строк мы достигаем BucketSize и останавливаем цикл while, поэтому дубликаты не возникают.
Однако, если файлы короче размера сегмента, должно произойти следующее: метод Read/ReadAsync должен возвращать false при достижении конца файла. Вместо этого происходит то, что при достижении последней строки программа чтения снова начинает работать с указанным индексом, а метод Read/ReadAsync возвращает false только после полного второго запуска. Это приводит к дублированию значений.

Код: Выделить всё

public async Task StartProcessingBatchAsync(Stream stream, long index, CancellationToken token)
{
_logger.LogInformation("Processing CSV async");
using var reader = new StreamReader(stream);
using var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = CsvHasHeaderRecord });
csv.Context.RegisterClassMap(_modelMap);

stream.Position = 0;
csv.Read();
csv.ReadHeader();
stream.Position = index;
var modelsList = new List();
var errorCount = 0;
var rowCounter = 0;

_logger.LogInformation($"Reading {_configuration.BucketSize} items starting from index: {stream.Position}");
while(await csv.ReadAsync() && rowCounter < _configuration.BucketSize)
{
TModel record;

try
{
record = csv.GetRecord();

Guard.NotNull(record, nameof(record));
}
catch
{
errorCount++;
continue;
}
modelsList.Add(record);
rowCounter++;
}
_logger.LogInformation($"Found {errorCount} errors out of {_configuration.BucketSize} items");

return modelsList;
}
Есть идеи, почему это так? Почему метод Read/ReadAsync выполняется при втором запуске вместо того, чтобы выдавать false в конце файла?

Подробнее здесь: https://stackoverflow.com/questions/781 ... cates-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»