Почему асинхронный метод делегата требует вызова EndInvoke?

Почему делегат должен вызывать EndInvoke до запуска метода? Если мне нужно вызвать EndInvoke (который блокирует поток), то это на самом деле не асинхронный вызов?

Вот код, который я пытаюсь запустить.

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

Ответы на вопрос(2)

Ваш ответ на вопрос