1

我已经读到该AsyncCallback函数将在委托调用完成后执行所有后处理任务。我的问题是在 after/below 之后编写后处理任务有什么区别EndInvoke,因为EndInvoke将等到委托调用返回。

4

2 回答 2

4

使用委托的 BeginInvoke() 方法的要点是目标将异步运行。如果您在 BeginInvoke() 之后立即调用 EndInvoke(),那么使用它就没有任何意义了。通过简单地直接调用委托,您将获得完全相同的行为,减去开销和线程问题。

当目标方法完成时,该值将在完成后立即异步获取回调。然后才调用EndInvoke(),它会立即完成。这会清理系统资源并在目标方法抛出异常时重新抛出异常。不要按照赞成的答案中的建议跳过调用 EndInvoke() ,您将泄漏资源至少 10 分钟。

于 2011-05-01T20:20:55.113 回答
2

您可以选择根本不调用 EndInvoke,而只依赖回调。这样,启动来自委托本身而不是您,您不必决定调用何时完成。

于 2011-05-01T19:29:18.990 回答