一次从多个线程引发同一事件是否安全?
本文关键字:事件 安全 是否 一次 线程 | 更新日期: 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,你应该清楚地记录该事件可能在哪个线程上引发。