Является ли реализация ниже потокобезопасной? Если нет, то что мне не хватает? Мне где-нибудь нужны 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);
}
}
Примечание. Причина, по которой у меня есть частные события и явный интерфейс, заключается в том, что это абстрактный базовый класс. И классы, которые унаследовали от него, не должны ничего делать напрямую с этим событием. Добавил обертку класса, чтобы было понятнее =)