Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Recetas.Cap04
- {
- public sealed class Waiting
- {
- string ProcesoLargo (int tiempoRetraso, out int threadEjecucion)
- {
- Thread.Sleep (tiempoRetraso);
- threadEjecucion = AppDomain.GetCurrentThreadId();;
- return String.Format ("Tiempo de retraso: {0}", tiempoRetraso.ToString());
- }
- delegate string Delegado (int tiempoRetraso, out int threadEjecucion);
- public void InvocacionAsincronica()
- {
- // Creación de la instancia del delegado, y la
- // encapsulación del método `ProcesoLargo`:
- Delegado del = new Delegado (this.ProcesoLargo);
- // Captura la cadena de caracteres devuelta por llamada
- // asincrónica al método `ProcesoLargo`:
- string cadena;
- // ID del thread que actúo sobre la llamada asincrónica:
- int threadEjecucion;
- // Iniciación de la invocación asincrónica del método `ProcesoLargo`:
- IAsyncResult iar = del.BeginInvoke (3000, out threadEjecucion, null, null);
- // Aquí se puede escribir código que se ejecutará en paralelo
- // con la llamada asincrónica al método `ProcesoLargo`:
- Console.WriteLine ("\nEsta sentencia se ejecutó mientras el método `ProcesoLargo` está en ejecución.");
- // Espera a que se genera la señal WaitHandle:
- iar.AsyncWaitHandle.WaitOne();
- // `WaitOne` bloquea la ejecución del thread principal hasta que la ejecución
- // asincrónica se complete. La siguiente l´nea no se ejecuta sino hasta que
- // se genera la señal `WaitHandle`:
- Console.WriteLine ("\nEsta sentencia espera a que la señal `WaitHandle` se complete en `WaitOne`.\n");
- // Obtiene los resultados de la llamada asincrínica:
- cadena = del.EndInvoke (out threadEjecucion, iar);
- Console.WriteLine(String.Format ("Valor de retorno del delegado \"{0}\" sobre el thread {1}\n", cadena, threadEjecucion.ToString()));
- }
- public static void Main()
- {
- Waiting esm = new Waiting();
- esm.InvocacionAsincronica();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement