在MulticastDelegate上调用BeginInvoke?

ric*_*ard 9 .net c# begininvoke multicastdelegate

根据Jon Skeet的说法,"您只能在具有单个目标调用的委托上调用BeginInvoke."

这是为什么?真正的原因是什么?

注意:为了澄清(因为我犯了这个错误),我说的BeginInvoke是代表,而不是控件.

Guv*_*nte 7

我认为Jon Skeet在您链接的帖子中做得很好:

您希望线程如何工作?您是否必须同步运行每个调用,但是相对于调用线程异步运行整个事件,或者您是否可以异步运行每个调用?

如果是前者,只需运行一个同步调用委托的线程池工作项.如果是后者,请使用Delegate.GetInvocationList获取调用列表,并依次对列表元素调用BeginInvoke.

基本上呼吁BeginInvokea MulticastDelegate是不明确的,你想让代表们互相等待吗?虽然理论上它可以为您决定,但已经做出选择,迫使您通过以不同方式调用委托来明确选择您想要的方法.

换句话说,它是避免混淆的设计选择.另外值得注意的是,BeginInvoke已经失宠并且新的异步编程方法可用,因此不太可能更新这个旧标准,所以即使他们现在想要改变,也没有理由.