Warum muss für die asynchrone Delegierungsmethode EndInvoke aufgerufen werden?

Warum muss der Delegat das EndInvoke aufrufen, bevor die Methode ausgelöst wird? Wenn ich das EndInvoke aufrufen muss (das den Thread blockiert), dann ist es nicht wirklich ein asynchroner Aufruf, oder?

Hier ist der Code, den ich ausführen möchte.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage