Advertisement
Fhernd

TplvsAwait.cs

Jun 26th, 2016
1,647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.49 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Ch05_UsingCSharp5Dot0.R0501
  6. {
  7.     /// <summary>
  8.     /// Clase para demostración de ejecución con TPL y await.
  9.     /// </summary>
  10.     public class TplVsAwait
  11.     {
  12.         /// <summary>
  13.         /// Ejecuta las demostraciones de ejecuciones con TPL y await.
  14.         /// </summary>
  15.         public void Ejecutar()
  16.         {
  17.             Console.WriteLine();
  18.             Task t = AsincronismoConTpl();
  19.             t.Wait();
  20.  
  21.             Console.WriteLine();
  22.  
  23.             t = AsincronismoConAwait();
  24.             t.Wait();
  25.         }
  26.  
  27.         /// <summary>
  28.         /// Demuestra el uso de TPL para llamada asincrónica.
  29.         /// </summary>
  30.         /// <returns></returns>
  31.         private Task AsincronismoConTpl()
  32.         {
  33.             Task<string> tarea = ObtenerInfoAsincro("Tarea No. 1");
  34.  
  35.             Task tarea2 = tarea.ContinueWith(t => Console.WriteLine(t.Result),
  36.                 TaskContinuationOptions.NotOnFaulted);
  37.             Task tarea3 = tarea.ContinueWith(t => Console.WriteLine(
  38.                 t.Exception.InnerException), TaskContinuationOptions.OnlyOnFaulted);
  39.  
  40.             return Task.WhenAny(tarea2, tarea3);
  41.         }
  42.  
  43.         /// <summary>
  44.         /// Demuestra el uso del operador await para llamada asincrónica.
  45.         /// </summary>
  46.         /// <returns>Objeto Task con información de la tarea ejecutada.</returns>
  47.         private async Task AsincronismoConAwait()
  48.         {
  49.             try
  50.             {
  51.                 string resultado = await ObtenerInfoAsincro("Tarea No. 2");
  52.                 Console.WriteLine(resultado);
  53.             }
  54.             catch (Exception ex)
  55.             {
  56.                 Console.WriteLine(ex);
  57.             }
  58.         }
  59.  
  60.         /// <summary>
  61.         /// Método asincrónico para demostrar la invocación desde TPL y await.
  62.         /// </summary>
  63.         /// <param name="nombre">Nombre de la tarea.</param>
  64.         /// <returns>Información del thread del pool de threads.</returns>
  65.         private async Task<string> ObtenerInfoAsincro(string nombre)
  66.         {
  67.             await Task.Delay(TimeSpan.FromSeconds(2));
  68.  
  69.             return String.Format("`{0}` se está ejecutando en el ID de thread {1}. "
  70.                                  + "¿Thread en el pool de threads?: {2}.",
  71.                 nombre,
  72.                 Thread.CurrentThread.ManagedThreadId,
  73.                 Thread.CurrentThread.IsThreadPoolThread);
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement