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
);
}
}
}
}