private async Task AddNewUsers(int usersChanged, ITestExecutionContextInternal context)
        {
            Console.WriteLine("Adding {0} Users", usersChanged);

            for (var i = 0; i < usersChanged; i++)
            {
                var userNum = context.CurrentUsers + 1;

                var httpUser = GetNextHttpUser(userNum);

                await Task.Run(async() =>
                {
                    var user = new User(userNum, httpUser);

                    Console.WriteLine($"Initializing User {userNum}");

                    try
                    {
                        await user.Initialize();
                        context.ModifyUsers(list => list.Add(user));

                        Console.WriteLine($"Added User {userNum}");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Failed initializing User {userNum}");
                        Console.Write(ex);
                        return;
                    }

                    await user.Run(result => UserIterationFinished?.Invoke(result));
                });
            }
        }
        private static void Shutdown(ITestExecutionContextInternal context)
        {
            Console.WriteLine("Stopping Users");
            RemoveUsers(context.CurrentUsers, context);
            Console.WriteLine("Users Stopped");

            Console.WriteLine();

            Console.WriteLine("Total Test Time: {0} Minutes", context.TotalMinutes);
        }
        private static void RemoveUsers(int usersChanged, ITestExecutionContextInternal context)
        {
            Console.WriteLine("Removing {0} Users", usersChanged);

            for (var i = 0; i < usersChanged; i++)
            {
                context.ModifyUsers(list =>
                {
                    var user = list[list.Count - 1];
                    user.Stop();

                    list.Remove(user);
                });
            }
        }
        private Task AddNewUsers(int usersChanged, ITestExecutionContextInternal context)
        {
            Console.WriteLine("Adding {0} Users", usersChanged);

            var addUserTasks = new List <Task>();

            for (var i = 0; i < usersChanged; i++)
            {
                var addUserTask = Task.Run(async() =>
                {
                    var userNum = context.UserInitializing();

                    var httpUser = GetNextHttpUser(userNum);

                    var user = new User(userNum, httpUser);

                    Console.WriteLine($"Initializing User {userNum}");

                    try
                    {
                        await user.Initialize();
                        context.UserInitialized(user);

                        Console.WriteLine($"Added User {userNum}");
                    }
                    catch (Exception)
                    {
                        Console.WriteLine($"GAVE UP Trying to initialize User {userNum}");
                        return;
                    }

                    await user.Run(_executionTimestamp.GetElapsedTime, result => UserIterationFinished?.Invoke(result));
                });

                addUserTasks.Add(addUserTask);
            }

            return(Task.WhenAll(addUserTasks));
        }
        private static void RemoveUsers(int usersChanged, ITestExecutionContextInternal context)
        {
            Console.WriteLine("Removing {0} Users", usersChanged);

            context.RemoveUsers(usersChanged);
        }