Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- using System.Threading.Tasks;
- namespace Recetas.Multithreading.R0407
- {
- public class GestionExcepcionesTarea
- {
- public static void Main()
- {
- Console.WriteLine ();
- // Creación y ejecución de tarea sincrónica:
- Task<int> tarea1;
- // Gestión de la excepción producida por `tarea1`:
- try
- {
- tarea1 = Task.Run( () => Tarea("Tarea No. 1", 2));
- int resultado = tarea1.Result;
- Console.WriteLine ("Resultado de Tarea No. 1: {0}.", resultado);
- }
- catch (Exception ex)
- {
- Console.WriteLine ("Excepción producida en Tarea No. 1: {0}.", ex);
- }
- Console.WriteLine ("------------------------------------------------");
- Console.WriteLine ();
- Task tarea2 = new Task<int>(() => Tarea("Tarea No. 2", 3));
- Task tarea3 = new Task<int>(() => Tarea("Tarea No. 4", 2));
- // Tarea compuesta:
- Task tareaCompuesta = Task.WhenAll (tarea2, tarea3);
- tareaCompuesta.ContinueWith (t =>
- Console.WriteLine ("Excepción de `tareaCompuesta`: {0}", t.Exception),
- TaskContinuationOptions.OnlyOnFaulted);
- // Inicio de la ejecución de `tarea2` y `tarea3`:
- tarea2.Start();
- tarea3.Start();
- // A espera de la finalización de la ejecución de las tareas:
- Thread.Sleep (TimeSpan.FromSeconds(5));
- }
- public static int Tarea(string nombre, int duracion)
- {
- Console.WriteLine("La tarea `{0}` se está ejecutando en el ID de Thread {1}. "
- + "¿Thread en pool de threads?: {2}", nombre,
- Thread.CurrentThread.ManagedThreadId,
- Thread.CurrentThread.IsThreadPoolThread);
- // Simulación de ejecución tardía:
- Thread.Sleep (TimeSpan.FromSeconds(duracion));
- // Lanzamiento de excepción:
- throw new Exception("¡Boom!");
- return 42 * duracion;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement