Warum muss der Delegat die EndInvoke aufrufen, bevor die Methode ausgelöst wird? Wenn ich die EndInvoke (die den Thread blockiert) aufrufen muss, dann ist es nicht wirklich ein asynchroner Aufruf, oder?Warum erfordert die asynchrone Delegatenmethode den Aufruf von EndInvoke?
Hier ist der Code im Versuch zu laufen.
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");
}
}
Entschuldigung könnten Sie mein Beispiel erweitern, um zu demonstrieren, was Sie mit Completion Handler meinen? Aus all den Artikeln, die ich gelesen habe, geht hervor, dass durch einfachen Aufruf von BeginInvoke der Methodenaufruf ausgelöst wird. –
Dies ist nur etwas korrekt - es werden keine Speicherlecks auftreten. https://gist.github.com/jcdickinson/9109599. In bestimmten Szenarios wird jedoch ein Tracking mit "Begin/End-Invoke" -Paaren durchgeführt - ein Beispiel ist: Wenn Sie 'End *' nicht auf 'Socket'-Operationen aufrufen, werden Ihre Socket-Leistungsindikatoren völlig außer Kontrolle geraten (kein Speicherleck, die Werte werden nur wild falsch sein). –