in Hands-on lab/lab-files/Tools/CustomerProfileJsonDataGenerator/CustomerProfileGenerator.cs [31:78]
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;
}