public Task StartAsync(CancellationToken cancellationToken) { Console.WriteLine("Starting to generate..."); // Using randomizer seed to generate repeatable data sets. var randomizer = new Randomizer(8675309); var serializer = new JsonSerializer { Formatting = Formatting.Indented }; // Get user account seed data: Console.WriteLine("Retrieving account data..."); using (var reader = new StreamReader(File.OpenRead(@"account-data.csv"))) { var header = reader.ReadLines() .First(); var lines = reader.ReadLines() .Skip(1); // Instantiate an AccountData object from the CSV line and header data, using the supplied factory: accounts.AddRange(lines.Select(line => AccountData.FromString(line, header))); } // Create directories for both sets of files: Directory.CreateDirectory(ProfileFolder1); Directory.CreateDirectory(ProfileFolder2); _fileTasks.Add("1", CreateUserAccountSourceFiles(serializer, randomizer)); _fileTasks.Add("2", CreateEcommerceSourceFiles(serializer, randomizer)); var tasks = _fileTasks.Select(t => t.Value).ToList(); while (tasks.Count > 0) { try { Task.WhenAll(tasks).Wait(); } catch (TaskCanceledException) { //expected } tasks = _fileTasks.Where(t => !t.Value.IsCompleted).Select(t => t.Value).ToList(); } Console.WriteLine("Finished."); return(Task.CompletedTask); }