下面的实现是线程安全的吗?如果不是,我错过了什么?我应该在volatile
某处有关键字吗?还是OnProcessingCompleted
方法中某处的锁?如果有,在哪里?
public abstract class ProcessBase : IProcess
{
private readonly object completedEventLock = new object();
private event EventHandler<ProcessCompletedEventArgs> ProcessCompleted;
event EventHandler<ProcessCompletedEventArgs> IProcess.ProcessCompleted
{
add
{
lock (completedEventLock)
ProcessCompleted += value;
}
remove
{
lock (completedEventLock)
ProcessCompleted -= value;
}
}
protected void OnProcessingCompleted(ProcessCompletedEventArgs e)
{
EventHandler<ProcessCompletedEventArgs> handler = ProcessCompleted;
if (handler != null)
handler(this, e);
}
}
注意:我之所以有私有事件和显式接口的东西,是因为它是一个抽象基类。从它继承的类不应该直接对该事件做任何事情。添加了类包装器,使其更清晰=)