¿Por qué el delegado necesita llamar a EndInvoke antes de que el método se dispare? Si necesito llamar a EndInvoke (que bloquea el hilo), entonces no es realmente una llamada asíncrona, ¿verdad?¿Por qué el método de delegado asíncrono requiere llamar a EndInvoke?
Aquí está el código que estoy tratando de ejecutar.
class Program
{
private delegate void GenerateXmlDelegate();
static void Main(string[] args)
{
GenerateXmlDelegate worker = new GenerateXmlDelegate(GenerateMainXml);
IAsyncResult result = worker.BeginInvoke(null, null);
}
private static void GenerateMainXml()
{
Thread.Sleep(10000);
Console.WriteLine("GenerateMainXml Called by delegate");
}
}
lo siento, ¿podría extender mi ejemplo para demostrar lo que quiere decir con Completion Handler? De todos los artículos que he leído sugiere que simplemente llamando a BeginInvoke se activará la llamada al método. –
Esto es solo algo correcto: no se producirá ninguna pérdida de memoria. https://gist.github.com/jcdickinson/9109599. Sin embargo, en ciertos escenarios, se realiza un seguimiento con los pares 'Begin/End-Invoke'; un ejemplo es: si no se llama' End * 'en las operaciones' Socket', los contadores de rendimiento del socket se perderán por completo (no hay pérdida de memoria, los valores serán completamente incorrectos). –