There's a modern idiom in C# that utilizes the null-conditional operator to promote thread-safety when using delegates. Namely:
Update?.Invoke(this, theArgs);
Why does this work? Does the C# specification guarantee atomicity in the operation? Does the null-conditional operator make an underlying copy of its operand before executing the Invoke() method?