c#事件是串行处理还是并行处理?
本文关键字:并行处理 处理 事件 | 更新日期: 2023-09-27 18:08:50
例如,我有一个触发事件的类,以及该事件的1000个订阅者。是否使用单个线程逐个触发每个订阅者委托?或者。net使用线程池并行处理部分或全部订阅?
正如Tigran所说,事件调用是串行的。更重要的是,如果其中一个订阅者在某个时刻抛出异常,则其余订阅者将不会被触发。
并行触发事件的最简单方法是
public event Action Event;
public void Trigger()
{
if (Event != null)
{
var delegates = Event.GetInvocationList();
Parallel.ForEach(delegates, d => d.DynamicInvoke());
}
}
这个实现在出现异常的情况下也会遇到同样的问题。
因此,事件是简单的串行调用。如果你想可以以异步方式运行它,但这是一个实现细节。
简而言之:没有任何内置的并行化或异步的标准.NET
事件,它是由你来实现它。