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

本文关键字:事件 安全 是否 一次 线程 | 更新日期: 2023-09-27 18:09:37

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

class Raiser
{
    public static event Action E = delegate { };
    public static void RaiseE()
    {
        // Called from many threads at once
        E();
    }
}

我想这是OK的,因为支持委托列表是不可变的,事件对象引用是自动更新的,但当涉及到多线程时,我宁愿确定而不是猜测:-)

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

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

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