例如,我有一个触发事件的类,以及该事件的 1000 个订阅者。是否使用单个线程来逐个触发每个订阅者委托?或者 .Net 是否使用线程池并行处理部分或全部订阅?
正如 Tigran 所说,事件调用是串行的。更重要的是,如果其中一个订阅者在某个时候抛出异常,则其他订阅者将不会被触发。
并行触发事件的最简单方法是
public event Action Event;
public void Trigger()
{
if (Event != null)
{
var delegates = Event.GetInvocationList();
Parallel.ForEach(delegates, d => d.DynamicInvoke());
}
}
Run Code Online (Sandbox Code Playgroud)
如果出现异常,此实现将遇到相同的问题。
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |