Advertisement
Fhernd

VoidAsync.cs

Jul 12th, 2016
1,091
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.09 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Ch05_UsingCSharp5Dot0.R0507
  6. {
  7.     /// <summary>
  8.     /// Clase para demostrar el uso de void en una operación asincrónica.
  9.     /// </summary>
  10.     public class VoidAsync
  11.     {
  12.         /// <summary>
  13.         /// Ejecuta la demostración de uso de void en operaciones asincrónicas.
  14.         /// </summary>
  15.         public void Ejecutar()
  16.         {
  17.             Task t = AsyncRetornoTask();
  18.             t.Wait();
  19.  
  20.             AsyncRetornoVoid();
  21.             Thread.Sleep(TimeSpan.FromSeconds(3));
  22.  
  23.             t = AsyncRetornoTaskConErrores();
  24.  
  25.             while (!t.IsFaulted)
  26.             {
  27.                 Thread.Sleep(TimeSpan.FromSeconds(1));
  28.             }
  29.             Console.WriteLine(t.Exception);
  30.  
  31.             // Manipulación de excepciones en operaciones asincrónicas
  32.             // que retornan void:
  33.             //try
  34.             //{
  35.             //    AsyncRetornoVoidConErrores();
  36.             //    Thread.Sleep(TimeSpan.FromSeconds(3));
  37.             //}
  38.             //catch (Exception ex)
  39.             //{
  40.             //    Console.WriteLine(ex);
  41.             //}
  42.  
  43.             // Gestión de excepciones irregular en expresiones lambda:
  44.             //int[] numeros = new[] {1, 2, 3, 4, 5};
  45.             //Array.ForEach(numeros, async numero =>
  46.             //{
  47.             //    await Task.Delay(TimeSpan.FromSeconds(1));
  48.  
  49.             //    if (numero == 3)
  50.             //    {
  51.             //        throw new Exception("¡Algo salió mal!");
  52.  
  53.             //        Console.WriteLine(numero);
  54.             //    }
  55.             //});
  56.  
  57.             Console.ReadLine();
  58.         }
  59.  
  60.         /// <summary>
  61.         /// Operación asincrónica que genera una excepción.
  62.         /// </summary>
  63.         /// <returns>Retorna una instancia de Task.</returns>
  64.         private async Task AsyncRetornoTaskConErrores()
  65.         {
  66.             string resultado = await ObtenerInfoAsync("AsyncRetornoTaskException", 2);
  67.  
  68.             Console.WriteLine(resultado);
  69.         }
  70.  
  71.         /// <summary>
  72.         /// Operación asincrónica que genera una excepción.
  73.         /// El tipo de retorno es void.
  74.         /// </summary>
  75.         private async void AsyncRetornoVoidConErrores()
  76.         {
  77.             string resultado = await ObtenerInfoAsync("AsyncRetornoVoidException", 2);
  78.  
  79.             Console.WriteLine(resultado);
  80.         }
  81.  
  82.         /// <summary>
  83.         /// Operación asincrónica que opera correctamente.
  84.         /// </summary>
  85.         /// <returns>Retorna objeto Task.</returns>
  86.         private async Task AsyncRetornoTask()
  87.         {
  88.             string resultado = await ObtenerInfoAsync("AsyncRetornoTask", 2);
  89.  
  90.             Console.WriteLine(resultado);
  91.         }
  92.  
  93.         /// <summary>
  94.         /// Operación asincrónica que opera correctamente.
  95.         /// Retorna void.
  96.         /// </summary>
  97.         private async void AsyncRetornoVoid()
  98.         {
  99.             string resultado = await ObtenerInfoAsync("AsyncRetornoVoid", 2);
  100.  
  101.             Console.WriteLine(resultado);
  102.         }
  103.  
  104.         /// <summary>
  105.         /// Operación asincrónica que obtiene la información del thread de ejecución.
  106.         /// </summary>
  107.         /// <param name="nombre">Nombre de la tarea a ejecutar.</param>
  108.         /// <param name="duracion">Duración de la tarea.</param>
  109.         /// <returns>Información del thread de ejecución.</returns>
  110.         private async Task<string> ObtenerInfoAsync(string nombre, int duracion)
  111.         {
  112.             await Task.Delay(TimeSpan.FromSeconds(duracion));
  113.  
  114.             if (nombre.Contains("Exception"))
  115.             {
  116.                 throw new Exception(String.Format("¡Algo salió mal: {0}!", nombre));
  117.             }
  118.  
  119.             return String.Format("`{0}` se está ejecutando en el ID de Thread {1}" +
  120.                                                   "¿Thread en el pool de threads?: {2}",
  121.                     nombre,
  122.                     Thread.CurrentThread.ManagedThreadId,
  123.                     Thread.CurrentThread.IsThreadPoolThread);
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement