using System; using System.Threading; class Driver { static volatile bool foo = false; static int res = 1; static void InnerFunc () { res = 2; try { res = 3; } finally { res = 4; Console.WriteLine ("EEE"); while (!foo); res = 5; Console.WriteLine ("in the finally block"); Thread.ResetAbort (); res = 6; } res = 7; throw new Exception ("lalala"); } static void Func () { try { InnerFunc (); } catch (Exception e) { res = 0; } } static int Main () { Thread t = new Thread (Func); t.Start (); Thread.Sleep (100); t.Abort (); foo = true; Console.WriteLine ("What now?"); t.Join (); Thread.Sleep (500); return res; } }