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);
        }