Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Receta.Cap04
  5. {
  6.     public sealed class Polling
  7.     {
  8.         string ProcesoLargo (int tiempoRetraso, out int threadEjecucion)
  9.         {
  10.             Thread.Sleep (tiempoRetraso);
  11.             threadEjecucion = AppDomain.GetCurrentThreadId();;
  12.             return String.Format ("Tiempo de retraso: {0}", tiempoRetraso.ToString());
  13.         }
  14.        
  15.         delegate string Delegado (int tiempoRetraso, out int threadEjecucion);
  16.        
  17.         public void InvocacionAsincronica()
  18.         {
  19.             // Creación de la instancia del delegado, y la
  20.             // encapsulación del método `ProcesoLargo`:
  21.             Delegado del = new Delegado (this.ProcesoLargo);
  22.            
  23.             // Captura la cadena de caracteres devuelta por llamada
  24.             // asincrónica al método `ProcesoLargo`:
  25.             string cadena;
  26.            
  27.             // ID del thread que actúo sobre la llamada asincrónica:
  28.             int threadEjecucion;
  29.            
  30.             // Iniciación de la invocación asincrónica del método `ProcesoLargo`:
  31.             IAsyncResult iar = del.BeginInvoke (3000, out threadEjecucion,  null, null);
  32.            
  33.             // Consulta (polling) por la completitud de la llamada asincrónica:
  34.             while (iar.IsCompleted == false)
  35.             {
  36.                 Console.WriteLine ("Polling...");
  37.                 Thread.Sleep (100);
  38.             }
  39.            
  40.             cadena = del.EndInvoke (out threadEjecucion, iar);
  41.            
  42.             Console.WriteLine(String.Format  ("\nValor de retorno del delegado \"{0}\" sobre el thread {1}\n", cadena, threadEjecucion.ToString()));
  43.         }
  44.        
  45.         public static void Main()
  46.         {
  47.             Polling p = new Polling();
  48.             p.InvocacionAsincronica();
  49.         }
  50.     }
  51. }