c#事件是串行处理还是并行处理?

本文关键字:并行处理 处理 事件 | 更新日期: 2023-09-27 18:08:50

例如,我有一个触发事件的类,以及该事件的1000个订阅者。是否使用单个线程逐个触发每个订阅者委托?或者。net使用线程池并行处理部分或全部订阅?

c#事件是串行处理还是并行处理?

正如Tigran所说,事件调用是串行的。更重要的是,如果其中一个订阅者在某个时刻抛出异常,则其余订阅者将不会被触发。

并行触发事件的最简单方法是

    public event Action Event;
    public void Trigger()
    {
        if (Event != null)
        {
            var delegates = Event.GetInvocationList();
            Parallel.ForEach(delegates, d => d.DynamicInvoke());
        }
    }

这个实现在出现异常的情况下也会遇到同样的问题。

因此,事件是简单的串行调用。如果你想可以以异步方式运行它,但这是一个实现细节。

简而言之:没有任何内置的并行化或异步的标准.NET事件,它是由你来实现它。