例如,我有一个触发事件的类,以及该事件的1000个订阅者。用于逐个触发每个订阅者委托的单个线程吗?或.Net使用线程池并行处理部分或全部订阅?
答案 0 :(得分:3)
原样,事件是简单的串行调用。如果你想要可以以异步方式运行它,但这是一个实现细节。
简而言之:标准.NET
事件没有任何内置的并行化或异步,您需要实现它。
答案 1 :(得分:2)
正如Tigran所说,事件调用是串行的。如果其中一个订阅者在某个时刻抛出异常,其余的将不会被触发,甚至更多。
并行触发事件的最简单方法是
public event Action Event;
public void Trigger()
{
if (Event != null)
{
var delegates = Event.GetInvocationList();
Parallel.ForEach(delegates, d => d.DynamicInvoke());
}
}
如果发生异常,此实现将遇到同样的问题。