Я генерирую новый текстовый файл каждые 5 секунд и записываю в него записи.У меня есть разные методы для обоих процессов.Поэтому, прежде всего, он создает файл и запускает процесс для записи в него данных, и снова, если создать метод доступа к файлу снова через 5 секунд, то запись не будет полностью записана в предыдущем файле.Итак, как я могу завершить его и после этого создать новый файл?
Я применяю приведенный ниже код для реализации:
const string filePath = @"D:\TestSymbolsData.txt";
public static void ReadAndWriteInFile()
{
Timer timer = new .Timer(new TimerCallback(createtxtFile));
timer.Change(0L, 5000);
File.ReadLines(filePath).ToList().Take(1000)
.AsParallel()
.Select(JsonConvert.DeserializeObject<List<LiveAMData>>)
.ForAll(WriteRecordTest);
}
static StreamWriter tempWriter;
static System.Threading.Tasks.Task t1;
public static async void WriteRecordTest(List<LiveAMData> data)
{
List<LiveAMData> data1 = data.AsParallel().Where(x => symbolList.Contains(x.sym)).ToList();
foreach (var dt in data1)
{
t1 = Task.Run(() =>
{
var result = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddTicks(((long)dt.s) * TimeSpan.TicksPerMillisecond);
DateTime newDT = TimeZoneInfo.ConvertTimeFromUtc(result, targetZone);
lock(tempWriter)
{
tempWriter.WriteLine(dt.sym + ", " + newDT.ToString("dd/MM/yyyy HH:mm:ss fff tt") + ", " + dt.v);
}
});
}
}
public static void createtxtFile(object state)
{
if(t1 != null)
{
Task.WhenAll(t1);
sLogFname = $@"D:\LogFiles\{DateTime.Now:yyyyMMdd_HHmmss}.txt";
tempWriter = new StreamWriter(new FileStream(sLogFname, FileMode.Append, FileAccess.Write));
}
else
{
sLogFname = $@"D:\LogFiles\{DateTime.Now:yyyyMMdd_HHmmss}.txt";
tempWriter = new StreamWriter(new FileStream(sLogFname, FileMode.Append, FileAccess.Write));
}
}
, и в файлах последняя строка становится похожей на остановку в середине процесса исоздать новый файл.
CORE, 05/02/2019 10:27:00 000 AM, 548
YUM, 05/02/2019 10:27:00 000 AM, 1109
DVY, 05/02/2019 10:27
На самом деле последняя запись DVY - это половина данных, и это происходит почти во всех файлах.
Так что я думаю, что эта проблема возникает из-за второго процесса (создание файла).Итак, какое решение я должен обратиться для решения этой проблемы?