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

最佳答案

使用委托的BeginInvoke()方法的目的是目标将异步运行。如果在BeginInvoke()之后立即调用EndInvoke(),则不再需要使用它。通过直接直接调用该委托,您将获得完全相同的行为,减去开销和线程麻烦。

目标方法完成后,该值将获取回调,此后立即异步执行。只有然后调用EndInvoke(),它才能立即完成。这将清理系统资源,并在目标方法抛出一个异常时重新引发异常。请勿按照更新后的答案中的建议跳过对EndInvoke()的调用,否则将泄漏资源至少10分钟。

10-04 12:05