static void Main(string[] args)
        {
            var coffee = Breakfast.PourCoffee();

            while (!coffee.Temperature.Equals("Cold"))
            {
                Console.WriteLine("Coffee temperature: " + coffee.Temperature);
            }
            Console.WriteLine("Coffee temperature: " + coffee.Temperature);

            var bacon = Breakfast.FryBacon(5);

            Breakfast.EatBacon(ref bacon, 2);

            var eggs = Breakfast.FryEggs(4);

            eggs.Print();

            var toasts = Breakfast.ToastBread(6);

            Breakfast.ApplyButter(toasts[1]);
            Breakfast.ApplyButter(toasts[4]);

            for (int i = 0; i < toasts.Length; i++)
            {
                var buttered = toasts[i].ButterApplied;
                var jamed    = toasts[i].JamApplied;

                Console.WriteLine("Butter on Toast #" + i + ": " + buttered);
                Console.WriteLine("Jam on Toast #" + i + ": " + jamed);
            }
        }
        public void TestApplyingToToast()
        {
            var toasts = Breakfast.ToastBread(2);

            Breakfast.ApplyButter(toasts[0]);
            Breakfast.ApplyJam(toasts[1]);

            Assert.False(toasts[0].JamApplied);
            Assert.False(toasts[1].ButterApplied);
            Assert.True(toasts[1].JamApplied);
            Assert.True(toasts[0].ButterApplied);
        }
        public void TestToastingBreadLength()
        {
            var toasts = Breakfast.ToastBread(2);

            Assert.Equal(2, toasts.Count);
        }
        static async Task Main(string[] args)
        {
            DateTime startTime;
            DateTime endTime;

            Console.WriteLine("Aufgabe Breakfast");

            if (true)
            {
                Console.WriteLine();
                Console.WriteLine("-----------------------------");
                Console.WriteLine("--- Make normal Breakfast ---");
                Console.WriteLine("-----------------------------");

                startTime = System.DateTime.Now;

                var coffee      = Breakfast.PourCoffee();
                var eggs        = Breakfast.FryEggs(4);
                var bacon       = Breakfast.FryBacon(10);
                var toastBreads = Breakfast.ToastBread(3);

                foreach (var toastBread in toastBreads)
                {
                    Breakfast.ApplyButter(toastBread);
                }

                foreach (var toastBread in toastBreads)
                {
                    Breakfast.ApplyJam(toastBread);
                }

                var juice = Breakfast.PourJuice();

                endTime = System.DateTime.Now;

                var cookingTime = endTime - startTime;

                Console.WriteLine("*** Breakfast is finish!!! It took " + cookingTime + " (hh:mm:ss.ms)");
            }

            if (true)
            {
                Console.WriteLine();
                Console.WriteLine("----------------------------");
                Console.WriteLine("--- Make async Breakfast ---");
                Console.WriteLine("----------------------------");

                startTime = System.DateTime.Now;

                var coffee2   = Breakfast.PourCoffee();// PureCoffe();
                var eggsTask  = Breakfast.FryEggsAsync(4);
                var baconTask = Breakfast.FryBaconAsync(10);
                var toastTask = MakeToastWithButterAndJamAsync(3);

                var breakfastTasks = new List <Task> {
                    eggsTask, baconTask, toastTask
                };
                while (breakfastTasks.Count > 0)
                {
                    Task finishedTask = await Task.WhenAny(breakfastTasks);

                    if (finishedTask == eggsTask)
                    {
                        Console.WriteLine("eggs are ready");
                    }
                    else if (finishedTask == baconTask)
                    {
                        Console.WriteLine("bacon is ready");
                    }
                    else if (finishedTask == toastTask)
                    {
                        Console.WriteLine("toast is ready");
                    }
                    breakfastTasks.Remove(finishedTask);
                }

                Juice juice = Breakfast.PourJuice();

                endTime = System.DateTime.Now;
                var cookingTime = endTime - startTime;

                Console.WriteLine("*** Async Breakfast is finish!!! It took " + cookingTime + " (hh:mm:ss.ms)");
            }

            Console.WriteLine();
            Console.WriteLine("press enter to start Parallel ForEach");
            Console.ReadLine();

            Console.WriteLine();
            Console.WriteLine("------------------------");
            Console.WriteLine("--- Parallel ForEach ---");
            Console.WriteLine("------------------------");

            int length = 1000;

            int[] numbers = new int[length];

            for (int i = 0; i < length; i++)
            {
                numbers[i] = i;
            }

            int counter = 0;

            Parallel.ForEach(numbers, (x) =>
            {
                counter++;
                Console.WriteLine("number: " + x + " - counter: " + counter);
            });

            Console.ReadLine();
        }