private async Task LoadSockets(string fileName) { try { var sockets = new List <CustomSocket>(); var socketParser = new CsvRecordParser <CustomSocket>(new CustomSocketSerializer()); using (var csvReader = new StreamReader(File.OpenRead(fileName))) { foreach (var record in socketParser.ParseRecords(csvReader)) { sockets.Add(record); } } var upsertSockets = sockets.Select(p => Client.UpsertSocketAsync(p).ResponseAsync); var createdSockets = await Task.WhenAll(upsertSockets); Console.WriteLine($"Загрузка разъемов ({createdSockets.Length}) из CSV-файла завершена успешно"); } catch (Exception e) { WritePaddedTop(e.Message); } }
/// <summary>Синхронизация репозитория</summary> public CsvRepository <T> Sync() { // Очистка предыдущих значений записей _records.Clear(); _recordsByName.Clear(); // Читаем доступные записи из CSV файла using (var csvReader = new StreamReader(File.OpenRead(_options.CsvFileName))) { foreach (var record in _parser.ParseRecords(csvReader)) { var hashCode = record.GetHashCode(); if (_records.ContainsKey(hashCode)) { continue; } _records.Add(hashCode, record); _recordsByName.Add(GetRecordId(record), hashCode); } } // Читаем требуемые изменения WAL файла и применяем их using (var walReader = GetWalReader()) { string line; while ((line = walReader.ReadLine()) != null) { var entry = _walSerializer.Deserialize(line); switch (entry.Action) { case CsvDbAction.Insert: _records.Add(entry.HashCode, entry.Record); _recordsByName.Add(GetRecordId(entry.Record), entry.HashCode); break; case CsvDbAction.Update: _records.Remove(entry.HashCode); _records.Add(entry.Record.GetHashCode(), entry.Record); break; case CsvDbAction.Delete: _records.Remove(entry.HashCode); _recordsByName.Remove(GetRecordId(entry.Record)); break; } } } // Очищаем WAL файл using (var stream = GetWalStream()) stream.SetLength(0); // Очищаем CSV файл и заполняем его новыми значениями FileUtils.ClearFile(_options.CsvFileName); using (var writer = new StreamWriter(File.OpenWrite(_options.CsvFileName))) { writer.WriteLine(string.Join(_recordSerializer.Delimiter, _parser.CsvHead)); foreach (var record in _records.Values) { writer.WriteLine(_recordSerializer.Serialize(record)); } } return(this); }