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

标签 c# .net events

例如,我有一个触发事件的类,该事件有 1000 个订阅者。是否使用单个线程逐个触发每个订阅者委托(delegate)?还是 .Net 使用线程池并行处理部分或所有订阅?

最佳答案

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

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

    public event Action Event;

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

如果出现异常,此实现将遇到同样的问题。

关于c# - c# 事件是串行处理还是并行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257024/

相关文章:

c# - SqlNullValueException : Data is Null on Json call

c# - 不使用 JavaScript 验证 ASP.NET GridView 中的条目

c# - 如何在图像中的对象周围得到矩形?

c# - C#中的面向对象问题

.net - 如何避免在 IIF 中遇到错误的部分?

javascript - Internet Explorer 和 JavaScript 事件 currentTarget

c# - 公钥 token 的作用是什么?

c# - 检测互联网连接是否繁忙

android - 按钮单击事件未在取景器的第二个 View 中触发

c++ - 存在新串行端口时发出信号