Advertisement
Fhernd

ManejoExcepcionesAsync.cs

Jul 5th, 2016
875
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.93 KB | None | 0 0
  1. using System;
  2. using System.Threading.Tasks;
  3.  
  4. namespace Ch05_UsingCSharp5Dot0.R0505
  5. {
  6.     public class ManejoExcepcionesAsync
  7.     {
  8.         /// <summary>
  9.         /// Ejecución de las tareas asincrónicas.
  10.         /// </summary>
  11.         public void Ejecutar()
  12.         {
  13.             Task tarea = ProcesamientoAsincronico();
  14.             tarea.Wait();
  15.         }
  16.  
  17.         /// <summary>
  18.         /// Procesamiento asincrónico de excepciones.
  19.         /// </summary>
  20.         /// <returns>Tarea asincrónica.</returns>
  21.         private async Task ProcesamientoAsincronico()
  22.         {
  23.             Console.WriteLine("\n1. Excepción Única");
  24.  
  25.             try
  26.             {
  27.                 string resultado = await ObtenerInfoAsync("Tarea No. 1", 2);
  28.                 Console.WriteLine(resultado);
  29.             }
  30.             catch (Exception ex)
  31.             {
  32.                 Console.WriteLine("Detalles de la excepción: {0}", ex.Message);
  33.             }
  34.  
  35.             Console.WriteLine("\n2. Múltiples Excepciones");
  36.  
  37.             Task<string> tarea2 = ObtenerInfoAsync("Tarea No. 2", 3);
  38.             Task<string> tarea3 = ObtenerInfoAsync("Tarea No. 3", 2);
  39.  
  40.             try
  41.             {
  42.                 string[] resultados = await Task.WhenAll(tarea2, tarea3);
  43.                 Console.WriteLine(resultados.Length);
  44.             }
  45.             catch (Exception ex)
  46.             {
  47.                 Console.WriteLine("Detalles de la excepción: {0}", ex.Message);
  48.             }
  49.  
  50.             Console.WriteLine("\n3. Múltiples Excepciones con AggregateException");
  51.  
  52.             Task<string> tarea4 = ObtenerInfoAsync("Tarea No. 4", 3);
  53.             Task<string> tarea5 = ObtenerInfoAsync("Tarea No. 5", 2);
  54.             Task<string[]> tarea6 = Task.WhenAll(tarea4, tarea5);
  55.  
  56.             try
  57.             {
  58.                 string[] resultados = await tarea6;
  59.                 Console.WriteLine(resultados.Length);
  60.             }
  61.             catch (Exception)
  62.             {
  63.                 var ae = tarea6.Exception.Flatten();
  64.                 var excepciones = ae.InnerExceptions;
  65.                 Console.WriteLine("Excepciones atrapadas: {0}", excepciones.Count);
  66.  
  67.                 foreach (var e in excepciones)
  68.                 {
  69.                     Console.WriteLine("Detalles de la excepción: {0}\n", e.Message);
  70.                 }
  71.             }
  72.         }
  73.  
  74.         /// <summary>
  75.         /// Operación asincrónica que simula la ejecución de un tarea extendida.
  76.         /// </summary>
  77.         /// <param name="nombre">Nombre de la tarea.</param>
  78.         /// <param name="duracion">Duración de la tarea.</param>
  79.         /// <returns>Cadena con la información de la excepción.</returns>
  80.         private async Task<string> ObtenerInfoAsync(string nombre, int duracion)
  81.         {
  82.             await Task.Delay(TimeSpan.FromSeconds(duracion));
  83.  
  84.             throw new Exception(String.Format("Algo salió mal en {0}", nombre));
  85.         }
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement