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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • CsvReader.Read/CsvReader.ReadAsync дублирует данные
    Гость » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Гость
  • Почему Stream.ReadAsync может читать меньше байтов, чем Stream.Read?
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Почему ZipArchiveEntry.Open().ReadAsync(...) читает меньше байтов, чем ZipArchiveEntry.Open().Stream.Read(...)?
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Функция read() в C++ аналогична функции c read()
    Гость » » в форуме C++
    0 Ответы
    137 Просмотры
    Последнее сообщение Гость
  • PHP 7: SessionHandlerInterface::read(string $session_id): строка должна быть совместима с SessionHandlerInterface::read(
    Anonymous » » в форуме Php
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous

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