Нулевой условный оператор примерно эквивалентен:
var handler = this.PropertyChanged;
if (handler != null)
{
handler(…);
}
Часть, где он создает локальную переменную? Это то, что поможет с безопасностью потока.
Однако это не на 100% надежно. Видите ли, люди использовали этот шаблон раньше. Это был постоянный совет для событий. Но если вы не пометите handler
как volatile
, компилятор или JiT-компилятор могут отключить его из-за недостаточно используемой переменной. Компилятор, устанавливающий его сам по себе, может предотвратить это опровержение.
Но в конце концов, единственная надежная вещь - это оператор блокировки.