Perché il delegato deve chiamare EndInvoke prima che il metodo venga attivato? Se ho bisogno di chiamare EndInvoke (che blocca il thread), allora non è una chiamata asincrona?Perché il metodo di delega asincrono richiede la chiamata a EndInvoke?
Ecco il codice che sto cercando di eseguire.
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");
}
}
scusa potresti estendere il mio esempio per dimostrare cosa intendi per Completion Handler? Da tutti gli articoli che ho letto suggerisce che semplicemente chiamando BeginInvoke si attiva la chiamata al metodo. –
Questo è solo un po 'corretto - non si verificheranno perdite di memoria. https://gist.github.com/jcdickinson/9109599. In alcuni scenari, tuttavia, alcune tracce vengono eseguite con coppie 'Begin/End-Invoke' - un esempio è: se non si chiama' End * 'su operazioni' Socket' i contatori delle prestazioni del socket andranno completamente fuori whack (nessuna perdita di memoria, i valori saranno semplicemente errati). –