I was looking at these questions from 2009: C# Events and Thread Safety
I also looked at Eric Lippert's blog post on the same topic: http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx
The problem seems to boil down to, in a multithreaded environment you will occasionally encounter the situation where a different thread has unregistered the delegate between your thread's (thread A) 'if' statement and 'call delegate' statement.
As I was reading, this question came to my mind: If the alternates seem to be a choice between either a race condition or a thrown exception, then why not just wrap it in a try/catch block and not worry about either? If you catch the nullReferenceException, just ignore it in the catch block (simply to suppress the exception) and move on.
Now, I understand Eric Lippert and John Skeet know a little bit about C#, multithreading, and delegates, so could someone please take a moment and explain what I am missing here?