为什么我的 BeginInvoke 运行 同步

Why does my BeginInvoke run synchronously

我已经创建了一个 WCF 应用程序,并且我在多个地方异步使用 BeginInvoke 到 运行 方法。在某些地方它是异步的,而在其他地方它 运行 是同步的。因为系统非常复杂,所以我希望只是抛出这个高级问题,希望有人知道 BeginInvoke 将被强制同步的原因 运行ning.

我考虑并认为不是原因的可能原因:

非常感谢ideas/solutions

我想引用 Joe Duffy 在他关于 Windows 的并发编程一书中关于 Delegate.BeginInvoke 的引述:

All delegate types, by convention offer a BeginInvoke and EndInvoke method alongside the ordinary synchronous Invoke method. While this is a nice programming model feature, you should stay away from them wherever possible. The implementation uses remoting infrastructure which imposes a sizable overhead to asynchronous invocation. Queue work to the thread pool directly is often a better approach, though that means you have to co-ordinate the rendezvous logic yourself.

我以前做过自己的测试,如果经常使用这些,开销可能会达到很多秒。也许这不是您问题的答案——因为如果不查看和调试代码,我认为几乎不可能。这更像是一个建议,您应该重新审视您的方法。也许通过直接将工作排队到 ThreadPool,或使用 TPL(Task's / async&await)。

如果您仍然在寻找当前代码的问题而不是修改它以获得更好的策略,并且您仍然需要帮助,您应该找到一种方法来重现您的症状(即 运行同步)并提供证明这一点的代码。