Advertisement
Fhernd

AwaiterPersonalizado.cs

Jul 13th, 2016
1,022
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.58 KB | None | 0 0
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. using System.Threading;
  4.  
  5. namespace Ch05_UsingCSharp5Dot0.R0508
  6. {
  7.     /// <summary>
  8.     /// Represnta la implementación del awaiter personalizado.
  9.     /// Implementa la interfaz `INotifyCompletion`.
  10.     /// </summary>
  11.     public class AwaiterPersonalizado : INotifyCompletion
  12.     {
  13.         /// <summary>
  14.         /// Resultado por defecto del modo de ejecución.
  15.         /// </summary>
  16.         private string _resultado = "Finalizado en Modo Asincrono.";
  17.         /// <summary>
  18.         /// Especifica el modo de ejecución.
  19.         /// </summary>
  20.         private readonly bool _completoSincronico;
  21.  
  22.         /// <summary>
  23.         /// Determina si la ejecución se ha finalizado.
  24.         /// </summary>
  25.         public bool IsCompleted
  26.         {
  27.             get { return _completoSincronico; }
  28.         }
  29.  
  30.         /// <summary>
  31.         /// Crea un objeto `AwaiterPersonalizado`.
  32.         /// </summary>
  33.         /// <param name="completoSincronico">El modo de ejecución.</param>
  34.         public AwaiterPersonalizado(bool completoSincronico)
  35.         {
  36.             _completoSincronico = completoSincronico;
  37.         }
  38.  
  39.         /// <summary>
  40.         /// Recupera el resultado de la operación asincrónica.
  41.         /// </summary>
  42.         /// <returns>Cadena con la representación del resultado de la operación.</returns>
  43.         public string GetResult()
  44.         {
  45.             return _resultado;
  46.         }
  47.  
  48.         /// <summary>
  49.         /// Al completarse la operación asincrónica.
  50.         /// </summary>
  51.         /// <param name="continuation">Acción a ejecutarse una vez se completa la operación.</param>
  52.         public void OnCompleted(Action continuation)
  53.         {
  54.             ThreadPool.QueueUserWorkItem(estado =>
  55.             {
  56.                 Thread.Sleep(TimeSpan.FromSeconds(1));
  57.                 _resultado = ObtenerInfoThread();
  58.  
  59.                 if (continuation != null)
  60.                 {
  61.                     continuation();
  62.                 }
  63.             });
  64.         }
  65.  
  66.         /// <summary>
  67.         /// Obtiene la información del thread de ejecución del proceso.
  68.         /// </summary>
  69.         /// <returns>Información del thread de ejecución.</returns>
  70.         private string ObtenerInfoThread()
  71.         {
  72.             return String.Format("Tarea ejecutándose en el ID de thread {0}. " +
  73.                                  "¿El thread está en el pool de threads?: {1}",
  74.                 Thread.CurrentThread.ManagedThreadId,
  75.                 Thread.CurrentThread.IsThreadPoolThread);
  76.         }
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement