static void Main(string[] args)
        {
            MyClass myClass = new MyClass();

            // Pass a regular method as a callback
            myClass.LongRunningMethod1(printProgress);

            Console.WriteLine("/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*");

            // Pass a Lambda expression as a callboack
            myClass.LongRunningMethod1(progress =>
            {
                if (progress % 100 == 0) // Print only multiples of 100
                {
                    Console.WriteLine(progress);
                }
            });

            Console.WriteLine("/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*");
            Console.WriteLine("/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*");

            // Using System Action
            myClass.LongRunningMethod2(printProgress);

            Console.WriteLine("/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*");

            // Lambda expressions are equivalent to a delegate, so this works exactly the same as before.
            myClass.LongRunningMethod2((progress) =>
            {
                if (progress % 100 == 0) // Print only multiples of 100
                {
                    Console.WriteLine(progress);
                }
            });

            Console.ReadLine();
        }