Here’s a fun piece of .NET trivia involving thread aborts and exception handling.  What does the following code do?  And why does it do it?

 

using System;

using System.Threading;

 

class TATest

{

        public static void Main(string []args)

        {

                try

                {

                        Console.WriteLine("Aborting!");

                        Thread.CurrentThread.Abort();

                }

                finally

                {

                        if((Thread.CurrentThread.ThreadState & ThreadState.AbortRequested)!=0)

                        {

                                Console.WriteLine("Aborted!");

                                Thread.ResetAbort();

                        }

                }

                Console.WriteLine(“Bye bye!“);  

        }

}

 

(In writing this I've discovered my fingers really prefer to type byte over bye...  that t just seems so natural to come next).b