一次从多个线程引发同一事件是否安全?

时间:2014-06-20 14:25:07

标签: c# events thread-safety

我有一个从多个线程调用的事件。事件处理程序本身期望这样(它们是线程安全的)。但实际的并行调用是否安全?

class Raiser
{
    public static event Action E = delegate { };

    public static void RaiseE()
    {
        // Called from many threads at once
        E();
    }
}

我认为这是可以的,因为支持委托列表是不可变的,并且事件对象引用是原子更新的,但是当涉及多线程时,我宁愿确定而不是猜测: - )

1 个答案:

答案 0 :(得分:0)

是;这是完全线程安全的。

但是,如果任何处理程序(或它们调用的方法)不是线程安全的,那么您仍然会遇到问题。
如果这是一个公共API,您应该清楚地记录可能引发事件的线程。