我已经阅读了关于每个BeginInvoke()是否必须与EndInvoke()匹配的矛盾意见.是否有任何与调用EndInvoke()相关的泄漏或其他问题?
我已经阅读了几个论坛,甚至还有一个或两个stackoverflow问题,说使用Delegate.BeginInvoke时需要Delegate.EndInvoke.我读过的很多关于使用BeginInvoke的文章都未提及使用EndInvoke.此外,我仅使用BeginInvoke部署了生产代码,并且似乎没有任何内存问题.我使用BeginInvoke的方式通常是线程,我不关心它们完成或处理多长时间.
为什么委托需要在方法触发之前调用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");
}
}
Run Code Online (Sandbox Code Playgroud)