Ani*_*Ani 20
您的应用程序中有10个订阅者.一旦调用事件,订阅者是同步还是异步通知?
这取决于发布者如何"调用"该事件.在典型情况下(例如,类似C#字段的事件),处理程序只是多播委托的调用列表的成员.调用"事件"等同于调用支持委托,这反过来在道德上等同于按顺序调用其每个成员.所以一旦可以查看调用,例如:
MyEvent(this, myEventArgs);
Run Code Online (Sandbox Code Playgroud)
为类似到:
foreach(EventHandler handler in myEventDelegate.GetInvocationList())
handler(this, myEventArgs);
Run Code Online (Sandbox Code Playgroud)
它只是一系列委托调用:订阅者同步通知.当然,发布者可以选择以任何方式调用事件,因此不需要这样做 - 它可能使用线程池(QUWI/BeginInvoke)或任何其他产生异步通知的机制.
您的应用程序中有10个订阅者.现在一个事件处理程序有一个错误的代码,它会抛出一个异常.其他九个事件处理程序是否还在继续?
再次,这取决于.在典型的(上述)情况下,答案是否定的,因为异常不是基于每个订户处理的.如果处理程序抛出,则"foreach"的其余部分将被放弃.当然,没有什么可以阻止发布者在try-catch(ignore)块中包装每个处理程序的调用,或者使用任何其他机制来确保调用所有处理程序.
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |