Why is the field-like event invocation `Reading?.Invoke(this, e)` preferred over `if (Reading != null) Reading(this, e)` in multithreaded code?
// Pattern A
if (Reading != null) Reading(this, EventArgs.Empty);
// Pattern B
Reading?.Invoke(this, EventArgs.Empty);