using System; using System.Threading; namespace Recetas.Multithreading.Cap01.R0111 { public sealed class ManejoExcepcionesThread { public static void Main() { Console.Title = "Manejo de Excepciones en Threads ---"; Console.WriteLine (); // Creación de thread con método adyacente que cuenta // con manejo de excepciones interno: Thread t1 = new Thread (ThreadConBloqueTryCatch); // Inicio de ejecución: t1.Start(); // Espera a que finalice para continuar: t1.Join(); // Demostración de ejecución de thread con método adyacente // que no cuenta con su propia implementación para el // manejo de excepción: try { Thread t2 = new Thread (ThreadSinBloqueTryCatch); t2.Start(); } catch (Exception ex) { Console.WriteLine ("Esta región de manejo de excepción no es alcanzada."); } } // Método que simula el lanzamiento de una excepción, // pero que no cuenta con un bloque de try-catch: private static void ThreadSinBloqueTryCatch() { Console.WriteLine ("Inicio de ejecución de un thread con fallas."); Thread.Sleep (TimeSpan.FromSeconds (2)); throw new Exception ("¡Falla!"); } // Método que simula el lanzamiento de una excepción: private static void ThreadConBloqueTryCatch() { try { Console.WriteLine ("Inicio de ejecución de un thread con fallas."); Thread.Sleep (TimeSpan.FromSeconds (1)); throw new Exception ("¡Falla!"); } catch (Exception ex) { Console.WriteLine ("Control sobre la excepción: {0}", ex.Message ); } } } }