我有一个从多个线程调用的事件。事件处理程序本身期望这样(它们是线程安全的)。但实际的并行调用是否安全?
class Raiser
{
public static event Action E = delegate { };
public static void RaiseE()
{
// Called from many threads at once
E();
}
}
我认为这是可以的,因为支持委托列表是不可变的,并且事件对象引用是原子更新的,但是当涉及多线程时,我宁愿确定而不是猜测: - )
答案 0 :(得分:0)
是;这是完全线程安全的。
但是,如果任何处理程序(或它们调用的方法)不是线程安全的,那么您仍然会遇到问题。
如果这是一个公共API,您应该清楚地记录可能引发事件的线程。