Created
June 14, 2014 21:42
-
-
Save Fhernd/484ca81e8370676a2fbf to your computer and use it in GitHub Desktop.
Demostración de la técnica de polling de ejecución asincrónica de métodos en C#.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Threading; | |
namespace Receta.Cap04 | |
{ | |
public sealed class Polling | |
{ | |
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); | |
// Consulta (polling) por la completitud de la llamada asincrónica: | |
while (iar.IsCompleted == false) | |
{ | |
Console.WriteLine ("Polling..."); | |
Thread.Sleep (100); | |
} | |
cadena = del.EndInvoke (out threadEjecucion, iar); | |
Console.WriteLine(String.Format ("\nValor de retorno del delegado \"{0}\" sobre el thread {1}\n", cadena, threadEjecucion.ToString())); | |
} | |
public static void Main() | |
{ | |
Polling p = new Polling(); | |
p.InvocacionAsincronica(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment