Por que o método delegado assíncrono requer a chamada do EndInvoke?

Por que o representante precisa chamar o EndInvoke antes de o método ser acionado? Se eu preciso chamar o EndInvoke (que bloqueia o segmento), então não é realmente uma chamada assíncrona é?

Aqui está o código que estou tentando executar.

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");
        }
    }

questionAnswers(2)

yourAnswerToTheQuestion