private static void LoadDataAsync(string file, BlockingCollection <string> readLines, BlockingCollection <PersonDay> readData) { var readFile = Task.Run(() => { using (var lineReader = new StreamReader(file)) { string line; while ((line = lineReader.ReadLine()) != null) { readLines.Add(line); } } readLines.CompleteAdding(); }); var processLine = Task.Run(() => { foreach (var line in readLines.GetConsumingEnumerable()) { PersonDay data = new PersonDay(); // Read the line using (JsonTextReader reader = new JsonTextReader(new StringReader(line))) { SetupData(ref data); while (reader.Read()) { if (reader.TokenType == JsonToken.PropertyName) { switch ((string)reader.Value) { case "date": data.date = reader.ReadAsString(); break; case "mob": data.mob = reader.ReadAsString(); break; case "steps": ReadSteps(data.Steps, reader); break; case "tags": data.tags = ReadTags(reader); break; } } } } // Write the line if there was some real activity if (data.Steps.Count > 0) { readData.Add(data); } } readData.CompleteAdding(); }); }
private static void SetupData(ref PersonDay data) { data.Steps = data.Steps ?? new List <Step>(); data.Steps.Clear(); }