Advertisement
Fhernd

GestionExcepcionesTarea.cs

Jun 22nd, 2016
2,208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.34 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Recetas.Multithreading.R0407
  6. {
  7.     public class GestionExcepcionesTarea
  8.     {
  9.         public static void Main()
  10.         {
  11.             Console.WriteLine ();
  12.            
  13.             // Creación y ejecución de tarea sincrónica:
  14.             Task<int> tarea1;
  15.            
  16.             // Gestión de la excepción producida por `tarea1`:
  17.             try
  18.              {
  19.                 tarea1 = Task.Run( () => Tarea("Tarea No. 1", 2));
  20.                 int resultado = tarea1.Result;
  21.                 Console.WriteLine ("Resultado de Tarea No. 1: {0}.", resultado);
  22.             }
  23.             catch (Exception ex)
  24.             {
  25.                 Console.WriteLine ("Excepción producida en Tarea No. 1: {0}.", ex);
  26.             }
  27.            
  28.             Console.WriteLine ("------------------------------------------------");
  29.             Console.WriteLine ();
  30.            
  31.             Task tarea2 = new Task<int>(() => Tarea("Tarea No. 2", 3));
  32.             Task tarea3 = new Task<int>(() => Tarea("Tarea No. 4", 2));
  33.            
  34.             // Tarea compuesta:
  35.             Task tareaCompuesta = Task.WhenAll (tarea2, tarea3);
  36.            
  37.             tareaCompuesta.ContinueWith (t =>
  38.                 Console.WriteLine ("Excepción de `tareaCompuesta`: {0}", t.Exception),
  39.                 TaskContinuationOptions.OnlyOnFaulted);
  40.                
  41.             // Inicio de la ejecución de `tarea2` y `tarea3`:
  42.             tarea2.Start();
  43.             tarea3.Start();
  44.            
  45.             // A espera de la finalización de la ejecución de las tareas:
  46.             Thread.Sleep (TimeSpan.FromSeconds(5));
  47.         }
  48.        
  49.         public static int Tarea(string nombre, int duracion)
  50.         {
  51.             Console.WriteLine("La tarea `{0}` se está ejecutando en el ID de Thread {1}. "
  52.                 + "¿Thread en pool de threads?: {2}", nombre,
  53.                 Thread.CurrentThread.ManagedThreadId,
  54.                 Thread.CurrentThread.IsThreadPoolThread);
  55.                
  56.             // Simulación de ejecución tardía:
  57.             Thread.Sleep (TimeSpan.FromSeconds(duracion));
  58.            
  59.             // Lanzamiento de excepción:
  60.             throw new Exception("¡Boom!");
  61.            
  62.             return 42 * duracion;
  63.         }
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement