EndInvoke() - 可选或不可选?

时间:2009-10-29 11:01:09

标签: .net memory-leaks asynchronous delegates

异步问题:

我一直在网上阅读很多文章支持和反对Delegate.EndInvoke()是可选的。这些文章大多数是4-5岁。很多死链接。

任何人都可以在.NET 2.0中解释 - EndInvoke()确实可以防止不可避免的内存泄漏,如果是,请指出导致此泄漏的原因吗?

在同一主题上:如果EndInvoke()确实是必须的 - 我找到了使用运行EndInvoke()的回调方法实现Fire-and-forget机制的最佳方法。我很想听到其他人的意见。

谢谢, 0

2 个答案:

答案 0 :(得分:8)

对于Delegate.EndInvoke,您调用它。对于Control.EndInvoke,WinForms团队已经说过需要调用它。我不知道WPF的等价物,但我认为这样做是个好主意,除非你有一个真的有充分的理由相信你不需要。

我在threading article中为代表提供了一些“即发即弃”代码 - 大约一半(搜索“火”)。

答案 1 :(得分:5)

来自msdn

  

始终致电EndInvoke以完成您的   异步调用。

我建议你遵循这些指导方针,即使它今天没有泄漏,但明天可能会改变。