gpt4 book ai didi

c# - 面试题: Exception within Event Handler

转载 作者:太空狗 更新时间:2023-10-29 18:04:14 27 4
gpt4 key购买 nike

1) 您的 .NET 应用程序中有 10 个事件订阅者。调用事件后,订阅者是同步通知还是异步通知?

2) 您的 .NET 应用程序中有 10 个事件订阅者。现在一个事件处理程序有一个错误的代码并且它抛出一个异常。其他九个事件处理程序是否仍在继续?

谢谢,

最佳答案

You have 10 Subscribers to an event in your application. Once you invoke the event, do the subscribers get notified synchronously or asynchronously?

这取决于发布者如何“调用”事件。在典型情况下(例如 C# 类字段事件),处理程序只是多播委托(delegate)的调用列表的成员。调用“事件”等同于调用支持委托(delegate),这反过来在道德上等同于按顺序调用它的每个单独成员。所以一旦可以查看调用,例如:

MyEvent(this, myEventArgs);

类似于:

foreach(EventHandler handler in myEventDelegate.GetInvocationList())
handler(this, myEventArgs);

这只是一系列委托(delegate)调用:订阅者会同步得到通知。当然,发布者可以选择任何它喜欢的方式调用事件,所以它不需要这样做——它可以使用线程池(QUWI/BeginInvoke)或任何其他机制产生异步通知。

You have 10 Subscribers to an event in your application. Now one event handler has a bad code and it throws an exception. Do the other nine event handlers still continue?

同样,这取决于。在典型(上述)情况下,答案是否定的,因为没有针对每个订阅者处理异常。如果处理程序抛出异常,则“foreach”的其余部分将被放弃。当然,没有什么可以阻止发布者将每个处理程序的调用包装在 try-catch(忽略) block 中,或使用任何其他机制来确保调用所有处理程序。

关于c# - 面试题: Exception within Event Handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com