Обратите внимание, что если вы используете полевое событие, например:
public event EventHandler Foo;
то вы автоматически получите "lock (this)" на add/remove, хотя вам придется вручную добавить его при извлечении обработчика перед его вызовом (при условии, что вы хотите, чтобы вы прочитали последнюю написанную стоимость). Лично я не поклонник блокировки на "this", но вы можете не возражать - и это, безусловно, делает более простой код.