我已经读到该AsyncCallback
函数将在委托调用完成后执行所有后处理任务。我的问题是在 after/below 之后编写后处理任务有什么区别EndInvoke
,因为EndInvoke
将等到委托调用返回。
问问题
279 次
2 回答
4
使用委托的 BeginInvoke() 方法的要点是目标将异步运行。如果您在 BeginInvoke() 之后立即调用 EndInvoke(),那么使用它就没有任何意义了。通过简单地直接调用委托,您将获得完全相同的行为,减去开销和线程问题。
当目标方法完成时,该值将在完成后立即异步获取回调。然后才调用EndInvoke(),它会立即完成。这会清理系统资源并在目标方法抛出异常时重新抛出异常。不要按照赞成的答案中的建议跳过调用 EndInvoke() ,您将泄漏资源至少 10 分钟。
于 2011-05-01T20:20:55.113 回答
2
您可以选择根本不调用 EndInvoke,而只依赖回调。这样,启动来自委托本身而不是您,您不必决定调用何时完成。
于 2011-05-01T19:29:18.990 回答