Advertisement
Fhernd

Blocking.cs

Sep 16th, 2014
655
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.99 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement