fork download
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.Cap04
  5. {
  6. public sealed class Blocking
  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. // Aquí se puede escribir código que se ejecutará en paralelo
  34. // con la llamada asincrónica al método `ProcesoLargo`:
  35. Console.WriteLine ("Esta sentencia se ejecutó mientras el método `ProcesoLargo` está en ejecución.");
  36.  
  37. // Obtiene los resultados de la llamada asincrínica,
  38. // Bloque la ejecución del thread principal:
  39. cadena = del.EndInvoke (out threadEjecucion, iar);
  40.  
  41. Console.WriteLine(String.Format ("Valor de retorno del delegado \"{0}\" sobre el thread {1}", cadena, threadEjecucion.ToString()));
  42. }
  43.  
  44. public static void Main()
  45. {
  46. Blocking esm = new Blocking();
  47. esm.InvocacionAsincronica();
  48. }
  49. }
  50. }
Success #stdin #stdout 0.04s 36136KB
stdin
Standard input is empty
stdout
Esta sentencia se ejecutó mientras el método `ProcesoLargo` está en ejecución.
Valor de retorno del delegado "Tiempo de retraso: 3000" sobre el thread -1251103888