¿Por qué el método de delegado asíncrono requiere llamar a EndInvoke?

¿Por qué el delegado necesita llamar a EndInvoke antes de que se active el método? Si necesito llamar al EndInvoke (que bloquea el hilo), entonces no es realmente una llamada asíncrona, ¿verdad?

Aquí está el código que estoy intentando 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");
        }
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta