Beispiel #1
0
        static void Main(string[] args)
        {
            const int sleepDurationInSeconds = 1000;

            // TaskFactory.StartNew() vs. Task.Run()
            ActionTimer.Time("TaskFactory.StartNew()", () =>
            {
                Task factoryTask = Task.Factory.StartNew(() => Task.Delay(sleepDurationInSeconds));
                Task.WaitAll(factoryTask);
            });

            ActionTimer.Time("Task.Run()", () =>
            {
                Task runTask = Task.Run(() => Task.Delay(sleepDurationInSeconds));
                Task.WaitAll(runTask);
            });

            // Disclaimer
            Console.WriteLine(Environment.NewLine + "Disclaimer:" + Environment.NewLine + "TaskFactory.StartNew() runs faster because Task.Run goes through a setup process for async/await. The task returned by TaskFactory.StartNew can not be used with async/await unless unwraped into an asynchronous operation with TaskExtensions.Unwrap()." + Environment.NewLine);

            // Task Cancellation
            ActionTimer.Time("Task Cancellation", () =>
            {
                Console.WriteLine("Starting cancellable task which will run for 60 seconds if not cancelled (cancellation is set to occur after 3 seconds).");
                CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
                Task cancelableTask = Pseudo.LongRunningCancellableTask(cancellationTokenSource.Token);
                cancellationTokenSource.CancelAfter(3000);
                cancelableTask.Wait();
            });

            // Async / Await
            AsyncAwaitConcepts();

            Console.ReadLine();
        }
        public IActionResult makeit()
        {
            var tryit   = makeRandoms.RandomString(13);
            var mymodel = new Pseudo();

            return(View("pseudoview", mymodel));
        }
        public void Show(Pseudo num)
        {
            Control layout = _main.Controls["mainLayoutPanel"];
            int     pointX = 0;

            switch (num)
            {
            case Pseudo.ChatSettings:
                _current = _chatSettings;
                layout   = layout.Controls["chatInfoLayoutPanel"];
                pointX   = _main.Location.X + _main.Width - _current.Width - 8;
                break;

            case Pseudo.Search:
                _current = _search;
                layout   = layout.Controls["chatInfoLayoutPanel"];
                pointX   = _main.Location.X + _main.Width - _current.Width - 8;
                break;

            case Pseudo.CommonSettings:
                _current = _commonSettings;
                layout   = layout.Controls["commonLayoutPanel"];
                pointX   = _main.Location.X + 8;
                break;
            }
            int pointY = _main.Location.Y + layout.Height + 30;

            _current.Show();
            _current.Location = new Point(pointX, pointY);
            _current.Focus();
        }
        private Pseudo CheckLine(List <Pseudo> players)
        {
            Pseudo retour         = null;
            bool   isLineComplete = true;
            bool   isSamePlayer   = true;
            Pseudo currentPlayer  = null;

            if (players != null && players.Count() > 0)
            {
                currentPlayer = players[0];

                if (currentPlayer != null)
                {
                    foreach (Pseudo joueur in players)
                    {
                        isLineComplete &= (joueur != null);
                        isSamePlayer   &= (currentPlayer.Equals(joueur));
                    }

                    if (isSamePlayer && isLineComplete)
                    {
                        retour = currentPlayer;
                    }
                }
            }

            return(retour);
        }
 public IActionResult updateit(Pseudo incoming, int myhiddencount)
 {
     myhiddencount++;
     incoming.generatenew();
     incoming.count = myhiddencount;
     return(View(incoming));
 }
 public IActionResult Delete(int id)
 {
     try
     {
         Pseudo usr = _context.Pseudos.Where(pseudo => pseudo.Id == id).FirstOrDefault();
         if (usr != null)
         {
             _context.Pseudos.Remove(usr);
             _context.SaveChanges();
             return(Accepted(new Message()
             {
                 Detail = $"Pseudo {usr.Name} deleted"
             }));
         }
         else
         {
             return(NotFound());
         }
     }
     catch (Exception ex)
     {
         return(BadRequest(new Message()
         {
             Detail = ex.Message
         }));
     }
 }
 public IActionResult Post([FromBody] Pseudo value)
 {
     try
     {
         if (!_context.Pseudos.Where(pseudo => pseudo.Name == value.Name).Any())
         {
             _context.Pseudos.Add(value);
             _context.SaveChanges();
             return(CreatedAtAction(nameof(Get), new { id = value.Id }, value));
         }
         else
         {
             return(StatusCode(409, new Message()
             {
                 Detail = "Pseudo already exists"
             }));
         }
     }
     catch (Exception ex)
     {
         return(BadRequest(new Message()
         {
             Detail = ex.Message
         }));
     }
 }
Beispiel #8
0
 static Task <int> Countdown(int n)
 {
     return(Task <int> .Factory.StartNew((oldValue) =>
     {
         Pseudo.LongRunningAction().Invoke();
         Console.WriteLine(Environment.NewLine + ": " + (int)oldValue);
         return (int)oldValue - 1;
     }, n));
 }
Beispiel #9
0
        public void PutNotFound()
        {
            Pseudo pseudo = new Pseudo()
            {
                Name = "Perceval", Avatar = "Perceval.com"
            };

            var result = _pseudoController.Put(99999, pseudo) as NotFoundResult;

            Assert.Equal(404, result.StatusCode);
        }
Beispiel #10
0
        static void Main(string[] args)
        {
            //Lares Dominguez Brandon - 17211532
            Console.WriteLine("Ejercicio 2.1");
            For factofor = new For();

            factofor.Desplegar();
            Console.ReadLine();
            Console.WriteLine("Factorial utilizando Pseudocodigo");
            Console.Write("Introduzca algun numero: ");
            int    x      = Convert.ToInt16(Console.ReadLine());
            Pseudo pseudo = new Pseudo(x);

            pseudo.Desplegar();
            Console.ReadKey();
        }
Beispiel #11
0
        public void PutModified()
        {
            Pseudo pseudo = new Pseudo()
            {
                Name = "Grosminet", Avatar = "Grosminet.com"
            };

            var result = _pseudoController.Put(2, pseudo) as AcceptedResult;

            Assert.Equal(202, result.StatusCode);

            var result1   = _pseudoController.Get(2) as OkObjectResult;
            var pseudoMaj = result1.Value as Pseudo;

            Assert.Equal("Grosminet", pseudoMaj.Name);
        }
Beispiel #12
0
        public void PutConflict()
        {
            Pseudo pseudo = new Pseudo()
            {
                Name = "Perceval", Avatar = "Perceval.com"
            };

            var result         = _pseudoController.Post(pseudo) as CreatedAtActionResult;
            var pseudoInserted = result.Value as Pseudo;

            var result1 = _pseudoController.Put(pseudoInserted.Id, pseudo) as ObjectResult;
            var error   = result1.Value as Message;

            Assert.Equal(409, result1.StatusCode);
            Assert.Equal("Pseudo already exists", error.Detail);
        }
        public void NoWinner()
        {
            Pseudo j1 = new Pseudo()
            {
                Name = "Jordan", NombrePartie = 1, Victoires = 0, Avatar = "Jojo"
            };
            Pseudo j2 = new Pseudo()
            {
                Name = "Damien", NombrePartie = 10, Victoires = 0, Avatar = "Joker"
            };

            List <Square> grid = new List <Square>()
            {
                new Square()
                {
                    Id = 1, Owner = j1
                }, new Square()
                {
                    Id = 2, Owner = j2
                }, new Square()
                {
                    Id = 3, Owner = j1
                },
                new Square()
                {
                    Id = 4, Owner = j2
                }, new Square()
                {
                    Id = 5, Owner = j1
                }, new Square()
                {
                    Id = 6, Owner = j2
                },
                new Square()
                {
                    Id = 7, Owner = j1
                }, new Square()
                {
                    Id = 8, Owner = j2
                }, new Square()
                {
                    Id = 9, Owner = j1
                }
            };

            Assert.Equal(null, _morpionController.CheckVictory(grid));
        }
Beispiel #14
0
        public void PostGetPseudoMultiple(string name, string avatar)
        {
            var    results     = _pseudoController.Get() as OkObjectResult;
            var    listPseudos = results.Value as IList;
            Pseudo pseudo      = new Pseudo()
            {
                Name = name, Avatar = avatar
            };

            int beforeAdd = listPseudos.Count;
            var result    = _pseudoController.Post(pseudo) as CreatedAtActionResult;

            Assert.Equal(201, result.StatusCode);

            results = _pseudoController.Get(beforeAdd + 1) as OkObjectResult;
            pseudo  = results.Value as Pseudo;

            Assert.Equal(beforeAdd + 1, pseudo.Id);
        }
Beispiel #15
0
        /// <summary>
        /// Méthode appelée quand on clique sur le bouton inscription
        /// </summary>
        private void Registration_Click(object sender, RoutedEventArgs e)
        {
            string pseudo = Pseudo.Text, nom = Nom.Text, prenom = Prenom.Text, mdp = MotDePasse.Password;
            var    win = (Application.Current.MainWindow as MetroWindow);

            if (string.IsNullOrEmpty(pseudo) || string.IsNullOrEmpty(nom) || string.IsNullOrEmpty(prenom) || string.IsNullOrEmpty(mdp))
            {
                win.ShowMessageAsync("Erreur lors de l'inscription", "Merci de renseigner tout les champs :@");
                MotDePasse.Clear();

                return;
            }

            if (mdp.Length < 3)
            {
                win.ShowMessageAsync("Erreur lors de l'inscription", "Votre mot de passe doit faire plus de 3 caractères :(");
                return;
            }

            if (StockageBDD.CheckIfUserExists(pseudo))
            {
                win.ShowMessageAsync("Erreur lors de l'inscription", "Un utilisateur avec ce pseudo existe déjà");

                MotDePasse.Clear();
                Pseudo.Clear();

                return;
            }

            Utilisateur user = new Utilisateur(pseudo, nom, prenom, mdp);

            int insert = StockageBDD.Insert <Utilisateur>(user);

            if (insert < 0)
            {
                win.ShowMessageAsync("Erreur critique", "Impossible de vous inscrire, merci de contacter un administrateur");
                return;
            }

            UserChangedEvent.Instance.User = user;
            Switch(new FilmView(), false);
        }
Beispiel #16
0
        private static async void AsyncAwaitConcepts()
        {
            // IMPORTANT NOTE: "async void" usage here is justified for example purposes only! "async" should not be used with void-returning methods except for UI callbacks.

            // Async / Await
            Console.WriteLine(Environment.NewLine + "Async / Await starting... Typing to the console will not be blocked.");
            await Pseudo.LongRunningTaskAsync(5000).ContinueWith((finishedTask) => Console.WriteLine(Environment.NewLine + "Async / Await finished without blocking."));

            // Unwrapping Tasks
            Console.WriteLine(Environment.NewLine + "Unwrapping starting...");
            // NOTE: Tasks started with Task.Factory.StartNew need to be unwrapped due to returning a Task<Task> for each subsequent invocation.
            await Countdown(3).ContinueWith(t => Countdown(t.Result)).Unwrap().ContinueWith(t => Countdown(t.Result)).Unwrap().ContinueWith(t => Countdown(t.Result)).Unwrap();

            Console.WriteLine(Environment.NewLine + "Unwrapping finished.");

            // Non-Unwrapped Task Example
            Console.WriteLine(Environment.NewLine + "Starting non-unwrapped example (note the subsequent Result.Result calls in the code and the possible concurrency issues at runtime with awaiting Task.Factory.StartNew):");
            await Countdown(3).ContinueWith(t => Countdown(t.Result)).ContinueWith(t => Countdown(t.Result.Result));

            Console.WriteLine(Environment.NewLine + "Non-unwrapped example finished with possible concurrency issues for awaiting Task.Factory.StartNew without unwrapping the tasks.");
        }
 public IActionResult Put(int id, [FromBody] Pseudo value)
 {
     try
     {
         Pseudo usr = _context.Pseudos.Where(pseudo => pseudo.Id == id).FirstOrDefault();
         if (usr != null)
         {
             if (!_context.Pseudos.Where(pseudo => pseudo.Name == value.Name && pseudo.Id != value.Id).Any())
             {
                 usr.Name         = value.Name;
                 usr.Avatar       = value.Avatar;
                 usr.NombrePartie = value.NombrePartie;
                 usr.Victoires    = value.Victoires;
                 _context.Update(usr);
                 _context.SaveChanges();
                 return(Accepted(usr));
             }
             else
             {
                 return(StatusCode(409, new Message()
                 {
                     Detail = "Pseudo already exists"
                 }));
             }
         }
         else
         {
             return(NotFound());
         }
     }
     catch (Exception ex)
     {
         return(BadRequest(new Message()
         {
             Detail = ex.Message
         }));
     }
 }
        public IActionResult Get(int id)
        {
            try
            {
                Pseudo user = _context.Pseudos.Where(usr => usr.Id == id).FirstOrDefault();

                if (user != null)
                {
                    return(Ok(user));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new Message()
                {
                    Detail = ex.Message
                }));
            }
        }
 /// <summary>
 /// Compare l'instance actuelle avec un autre objet du même type
 /// </summary>
 /// <param name="other">Utilisateur à comparer</param>
 /// <returns>int superieur à 0 si cette instance suit other dans l'ordre de tri, inf à 0 sinon précède et 0 si même position</returns>
 public int CompareTo(UtilisateurConnecté other)
 {
     return(Pseudo.CompareTo(other.Pseudo));
 }
 /// <summary>
 /// Réécriture getHashCode
 /// </summary>
 /// <returns>hashCode de pseudo</returns>
 public override int GetHashCode()
 {
     return(Pseudo.GetHashCode());
 }
        public Pseudo CheckVictory([FromBody] List <Square> grid)
        {
            Pseudo winner = null;

            winner = CheckLine(new List <Pseudo>()
            {
                grid[0].Owner, grid[1].Owner, grid[2].Owner
            });

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[3].Owner, grid[4].Owner, grid[5].Owner
                });
            }

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[6].Owner, grid[7].Owner, grid[8].Owner
                });
            }

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[0].Owner, grid[3].Owner, grid[6].Owner
                });
            }

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[1].Owner, grid[4].Owner, grid[7].Owner
                });
            }

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[2].Owner, grid[5].Owner, grid[8].Owner
                });
            }

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[0].Owner, grid[4].Owner, grid[8].Owner
                });
            }

            if (winner == null)
            {
                winner = CheckLine(new List <Pseudo>()
                {
                    grid[2].Owner, grid[4].Owner, grid[6].Owner
                });
            }

            return(winner);
        }
 public override string ToString()
 {
     return(Pseudo.ToString());
 }
Beispiel #23
0
        public void Show(Pseudo num, Parameter par = Parameter.Null)
        {
            DarkerBackGround();
            string text = String.Empty, value = String.Empty, item1 = String.Empty, item2 = String.Empty;

            switch (par)
            {
            case Parameter.ChatTitle:
                text  = "название чата";
                value = DataBaseHelper.GetChat(_main.ChatId).Title;
                break;

            case Parameter.ChatPicture:
                text = "аватар чата";
                break;

            case Parameter.UserName:
                text  = "имя пользователя";
                value = DataBaseHelper.GetUser(_main.UserId).Name;
                break;

            case Parameter.UserLogin:
                text  = "логин пользователя";
                item1 = "Введите логин:";
                item2 = "Введите пароль:";
                break;

            case Parameter.UserPassword:
                text  = "пароль пользователя";
                item1 = "Введите текущий пароль:";
                item2 = "Введите новый пароль:";
                break;

            case Parameter.UserPicture:
                text = "новый аватар пользователя";
                break;

            case Parameter.LeaveChat:
                text = "покинуть данный чат";
                break;

            case Parameter.DeleteChat:
                text = "удалить данный чат";
                break;

            case Parameter.UsersAdd:
                text  = "Добавить пользователей";
                value = "Добавить";
                break;

            case Parameter.UserContacts:
                text  = "Контакты";
                value = "Добавить новый контакт";
                break;

            case Parameter.ChatMembers:
            case Parameter.NewChat:
                text  = "Пользователи чата";
                value = "Добавить пользователей";
                break;

            case Parameter.MessageAttachs:
                text = "Вложения";
                //value = "Загрузить все файлы";
                break;

            case Parameter.ChatAttachs:
                text = "Материалы чата";
                //value = "Загрузить все файлы";
                break;
            }
            switch (num)
            {
            case Pseudo.Input:
                var inputDialog = new SimpleInputSubForm(text, value);
                if (inputDialog.ShowDialog(_main) == DialogResult.OK)
                {
                    switch (par)
                    {
                    case Parameter.ChatTitle:
                        DataBaseHelper.ChangeTitle(_main.ChatId, inputDialog.Result);
                        _main.Chat_Update();
                        break;

                    case Parameter.UserName:
                        DataBaseHelper.ChangeName(_main.UserId, inputDialog.Result);
                        break;
                    }
                }
                break;

            case Pseudo.DoubleInput:
                var doubleInputDialog = new SimpleDoubleInputSubForm(text, item1, item2, par == Parameter.UserPassword);
                if (doubleInputDialog.ShowDialog(_main) == DialogResult.OK)
                {
                    try
                    {
                        switch (par)
                        {
                        case Parameter.UserLogin:
                            DataBaseHelper.ChangeLogin(_main.UserId, doubleInputDialog.Item1,
                                                       doubleInputDialog.Item2);
                            break;

                        case Parameter.UserPassword:
                            DataBaseHelper.ChangePassword(_main.UserId, doubleInputDialog.Item1,
                                                          doubleInputDialog.Item2);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        DataBaseHelper.ExceptionHandler(ex.Message);
                    }
                }
                break;

            case Pseudo.FileLoad:
                var fileLoadDialog = new SimpleFileLoadSubForm(text);
                if (fileLoadDialog.ShowDialog(_main) == DialogResult.OK)
                {
                    switch (par)
                    {
                    case Parameter.UserPicture:
                        DataBaseHelper.ChangeUserPicture(_main.UserId, Image.FromFile(fileLoadDialog.Result));
                        break;

                    case Parameter.ChatPicture:
                        DataBaseHelper.ChangeChatPicture(_main.ChatId, Image.FromFile(fileLoadDialog.Result));
                        _main.Chat_Update();
                        break;
                    }
                }
                break;

            case Pseudo.ChatInfo:
                var chatInfoDialog = new ChatInfoSubForm(DataBaseHelper.GetChat(_main.ChatId));
                chatInfoDialog.SetEvent(ChatInfoSubForm.Option.ChatMembersClick, ChatMembers_Click);
                chatInfoDialog.SetEvent(ChatInfoSubForm.Option.LeaveChatClick, LeaveChat_Click);
                chatInfoDialog.SetEvent(ChatInfoSubForm.Option.DeleteChatClick, DeleteChat_Click);
                chatInfoDialog.ShowDialog(_main);
                break;

            case Pseudo.YesNo:
                var yesNoDialog = new SimpleYesNoSubForm(text);
                if (yesNoDialog.ShowDialog() == DialogResult.Yes)
                {
                    switch (par)
                    {
                    case Parameter.LeaveChat:
                        _main.LeaveChat();
                        break;

                    case Parameter.DeleteChat:
                        _main.DeleteChat();
                        break;
                    }
                }
                break;

            case Pseudo.UserSettings:
                var userSettingsDialog = new UserSettingsSubForm(_main.UserId);
                userSettingsDialog.SetEvent(UserSettingsSubForm.Option.ChangeUserNameClick, ChangeUserName_Click);
                userSettingsDialog.SetEvent(UserSettingsSubForm.Option.ChangeLoginClick, ChangeLogin_Click);
                userSettingsDialog.SetEvent(UserSettingsSubForm.Option.ChangePasswordClick, ChangePassword_Click);
                userSettingsDialog.SetEvent(UserSettingsSubForm.Option.ChangePictureClick, ChangePicture_Click);
                userSettingsDialog.SetEvent(UserSettingsSubForm.Option.LogOutClick, LogOut_Click);

                _current = userSettingsDialog;
                userSettingsDialog.ShowDialog(_main);
                break;

            case Pseudo.UserList:
                IEnumerable <User>         userList = new List <User>();
                UserInfoControl.ButtonType bType    = UserInfoControl.ButtonType.Empty;
                var userListDialog = new UserListSubForm();
                switch (par)
                {
                case Parameter.UserContacts:
                    userList = DataBaseHelper.GetUserContacts(_main.UserId);
                    bType    = UserInfoControl.ButtonType.Delete;
                    userListDialog.SetEvent(UserListSubForm.Option.UserActionButtonClick, DeleteUserContact_Click);
                    userListDialog.AllowMultipleSelect = false;
                    break;

                case Parameter.UsersAdd:
                    var contacts = DataBaseHelper.GetUserContacts(_main.UserId);
                    var members  = DataBaseHelper.GetChatMembers(_main.ChatId);
                    userList = contacts.Where(c => members.All(m => m.Id != c.Id));
                    bType    = UserInfoControl.ButtonType.Empty;
                    userListDialog.AllowMultipleSelect = true;
                    userListDialog.SetEvent(UserListSubForm.Option.ActionButtonClick, AddChatMembers_Click);
                    break;

                case Parameter.NewChat:
                    userList = DataBaseHelper.GetUserContacts(_main.UserId);
                    bType    = UserInfoControl.ButtonType.Empty;
                    userListDialog.AllowMultipleSelect = true;
                    userListDialog.SetEvent(UserListSubForm.Option.ActionButtonClick, AddNewChat_click);
                    break;

                case Parameter.ChatMembers:
                    userList = DataBaseHelper.GetChatMembers(_main.ChatId);
                    bType    = UserInfoControl.ButtonType.Delete;
                    userListDialog.SetEvent(UserListSubForm.Option.ActionButtonClick, SelectAddChatMembers_Click);
                    userListDialog.SetEvent(UserListSubForm.Option.UserActionButtonClick, DeleteChatMember_Click);
                    break;
                }
                userListDialog.Size = new Size(userListDialog.Size.Width, _main.ClientRectangle.Height - 30);
                userListDialog.Fill(_main.UserId, userList, text, value, bType);
                userListDialog.ShowDialog(_main);
                break;

            case Pseudo.FileList:
                IEnumerable <File> fileList = new List <File>();
                switch (par)
                {
                case Parameter.MessageAttachs:
                    fileList = DataBaseHelper.GetMessage(_main.MessageId).Attachs.ToFileList();
                    break;

                case Parameter.ChatAttachs:
                    fileList = DataBaseHelper.GetChatAttachs(_main.ChatId).ToFileList();
                    break;
                }
                var attachViewDialog = new AttachsViewSubForm(text, fileList);
                attachViewDialog.ShowDialog(_main);

                break;
            }
            LighterBackGround();
        }
        static void Main(string[] args)
        {
            // Setup
            int iterations = 10;

            Console.WriteLine("Starting... ");

            // Non-Parallel
            ActionTimer.Time("Non-Parallel", () =>
            {
                for (int i = 0; i < iterations; i++)
                {
                    Pseudo.LongRunningAction().Invoke();
                }
            });

            // Parallel.For
            ActionTimer.Time("Parallel.For", () => Parallel.For(0, iterations, Pseudo.LongRunningActionInt()));

            // Parallel.Foreach
            ActionTimer.Time("Parallel.ForEach", () => Parallel.ForEach(Enumerable.Range(0, iterations), Pseudo.LongRunningActionInt()));

            // Parallel.Invoke
            Action[] iterationActions = new Action[iterations];
            for (int i = 0; i < iterationActions.Length; i++)
            {
                iterationActions[i] = Pseudo.LongRunningAction();
            }

            ActionTimer.Time("Parallel.Invoke", () => Parallel.Invoke(iterationActions));

            // Other Parallel method overloads
            ActionTimer.Time("Parallel.Foreach overload using the TLocal variable and TLocal finalizer (time has significance for this example)", () =>
            {
                const int maxRange = 100000;
                int totalBytes     = 0;
                Random random      = new Random();
                Parallel.ForEach(Enumerable.Range(0, random.Next(maxRange / 2, maxRange)), () => 0,
                                 (integer, loopState, threadLocalSubtotal) =>
                {
                    return(threadLocalSubtotal + BitConverter.GetBytes(integer).Length);
                },
                                 (threadLocalSubtotal) =>
                {
                    Interlocked.Add(ref totalBytes, threadLocalSubtotal);
                });
            });


            ActionTimer.Time("Parallel.Invoke", () => Parallel.Invoke(iterationActions));

            // P-LINQ Setup
            iterations = 100000;
            List <int> dataSet = Enumerable.Range(1, iterations).ToList();

            // LINQ (Non-Parallelized) Method Syntax
            ActionTimer.Time("LINQ (Non-Parallelized) Method Syntax", () => dataSet.Where(value => value % 2 == 0).ToList());

            // LINQ (Non-Parallelized) Query Syntax
            ActionTimer.Time("LINQ (Non-Parallelized) Query Syntax", () =>
            {
                (from value in dataSet
                 where value % 2 == 0
                 select value).ToList();
            });

            // P-LINQ Method Syntax
            ActionTimer.Time("P-LINQ Method Syntax", () => dataSet.AsParallel().Where(value => value % 2 == 0).ToList());

            // P-LINQ Query Syntax
            ActionTimer.Time("P-LINQ Query Syntax", () =>
                             (from value in dataSet.AsParallel()
                              where value % 2 == 0
                              select value).ToList()
                             );

            // LINQ ForEach
            ActionTimer.Time("LINQ ForEach", () => dataSet.ForEach((value) => { value = value / 2; }));

            // P-LINQ ForAll
            ActionTimer.Time("P-LINQ ForAll", () => dataSet.AsParallel().ForAll((value) => { value = value / 2; }));

            // Disclaimer
            Console.WriteLine(Environment.NewLine + "Disclaimer:" + Environment.NewLine + "Subsequent Parallel method calls may run faster due to memory caching.");

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // NOTE: The "ToList()" calls below are intentional for to immediately execute the otherwise deffered execution of the query for the sake of being able to use the "ForEach" extension of the IEnumerable interface to reduce output code.

            // Setup
            List <Pseudo.StateCityData> pseudoData      = Pseudo.GetPseudoStateCityData();
            List <Pseudo.CityData>      pseudoCityData  = Pseudo.GetPseudoCityData();
            List <Pseudo.StateData>     pseudoStateData = Pseudo.GetPseudoStateData();

            Console.WriteLine("Pseudo Data:");
            pseudoData.ForEach(data => Console.WriteLine(data.State + " " + data.City));
            Console.WriteLine();

            // SelectMany
            Console.WriteLine("SelectMany Method:");
            byte[] allCityBytes = pseudoData.SelectMany(data => Encoding.UTF8.GetBytes(data.City)).ToArray();
            Console.WriteLine(Encoding.UTF8.GetString(allCityBytes));
            Console.WriteLine();

            // Projection Example 1 - Method Syntax
            Console.WriteLine("Projected City Data - Method Syntax:");
            var pseudoCityDataCollection = pseudoData.Select(data => data.City);

            pseudoCityDataCollection.ToList().ForEach(cityData => Console.WriteLine(cityData));
            Console.WriteLine();

            // Projection Example 1 - Query Syntax
            Console.WriteLine("Projected City Data - Query Syntax:");
            var pseudoCityDataQuerySyntax = (from data in pseudoData select data.City);

            pseudoCityDataQuerySyntax.ToList().ForEach(cityData => Console.WriteLine(cityData));
            Console.WriteLine();

            // Projection Example 2 - Method Syntax (Anonymous Type Projection)
            Console.WriteLine("Projected Anonymous State & City Data - Method Syntax:");
            var pseudoStateCityDataCollection = pseudoData.Select(data => new { CityAndState = data.City + ", " + data.State });

            pseudoStateCityDataCollection.ToList().ForEach(data => Console.WriteLine(data.CityAndState));
            Console.WriteLine();

            // Projection Example 2 - Query Syntax (Anonymous Type Projection)
            Console.WriteLine("Projected Anonymous State & City Data - Query Syntax:");
            var pseudoStateCityDataCollectionQuerySyntax = (from data in pseudoData select new { CityAndState = data.City + ", " + data.State });

            pseudoStateCityDataCollectionQuerySyntax.ToList().ForEach(data => Console.WriteLine(data.CityAndState));
            Console.WriteLine();

            // Orderby Clause - Method Syntax
            Console.WriteLine("OrderBy - Method Syntax:");
            var pseudoOrderByCity = pseudoData.OrderBy(data => data.City).Select(data => data.City);

            pseudoOrderByCity.ToList().ForEach(data => Console.WriteLine(data));
            Console.WriteLine();

            // Orderby Clause - Query Syntax
            Console.WriteLine("OrderBy - Query Syntax:");
            var pseudoOrderByCityQuerySyntax = from data in pseudoData orderby data.City ascending select data.City;

            pseudoOrderByCityQuerySyntax.ToList().ForEach(data => Console.WriteLine(data));
            Console.WriteLine();

            // Group Clause - Method Syntax
            Console.WriteLine("Group - Method Syntax:");
            var pseudoCityStateGroup = pseudoData.GroupBy(data => data.City[0]);

            pseudoCityStateGroup.ToList().ForEach(displayGroupData);

            // Group Clause - Query Syntax
            Console.WriteLine("Group - Query Syntax:");
            var pseudoCityStateGroupQuerySyntax = from data in pseudoData group data by data.City[0];

            pseudoCityStateGroupQuerySyntax.ToList().ForEach(displayGroupData);

            // Join Clause - Method Syntax
            Console.WriteLine("Join - Method Syntax:");
            var pseudoCityStateJoin = pseudoCityData.Join(pseudoStateData, cityData => cityData.StateId, stateData => stateData.StateId, (cityData, stateData) => new { CityAndState = cityData.City + ", " + stateData.State });

            pseudoCityStateJoin.ToList().ForEach(data => Console.WriteLine(data.CityAndState));
            Console.WriteLine();

            // Join Clause - Query Syntax
            Console.WriteLine("Join - Query Syntax:");
            var pseudoCityStateJoinQuerySyntax = from cityData in pseudoCityData
                                                 join stateData in pseudoStateData on cityData.StateId equals stateData.StateId
                                                 select new { CityAndState = cityData.City + ", " + stateData.State };

            pseudoCityStateJoinQuerySyntax.ToList().ForEach(data => Console.WriteLine(data.CityAndState));
            Console.WriteLine();

            // Let Clause
            // NOTE: Could just write "from data in pseudoData select cityInReverse"... "Let" is more useful when the result needs to be used in a subsequent "from" clauses (i.e. from using String.Split()).
            Console.WriteLine("Let Clause - Cities in Reverse:");
            var letClauseQuery = from data in pseudoData
                                 let cityInReverse = data.City.Reverse()
                                                     select cityInReverse;

            letClauseQuery.ToList().ForEach(cityInReverse => Console.WriteLine(cityInReverse.ToArray()));
            Console.WriteLine();

            // Deffered Query Execution
            int iterations = 100000;

            Console.WriteLine("Deffered Query Execution - Query does not execute until it is enumerated:");
            ActionTimer.Time("Declaring The Query", () =>
            {
                for (int i = 0; i < iterations; i++)
                {
                    var defferedExecutionAnonymousScope = from data in pseudoData group data by data.City into g orderby g.Key ascending select g;
                }
            });

            var defferedExecution = from data in pseudoData
                                    group data by data.City into g
                                    orderby g.Key ascending
                                    select g;

            ActionTimer.Time("Executing the Query", () =>
            {
                for (int i = 0; i < iterations; i++)
                {
                    // NOTE: Compiler might optimize this out... If it does, save it to a non-anonymously scoped List<IGrouping<string, Pseudo.StateCityData>> variable and display it so the enumeration is actually used.
                    defferedExecution.ToList();
                }
            });

            Console.ReadLine();
        }