以下是示例代码:http://msdn.microsoft.com/en-us/library/system.eventhandler.aspx
protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
{
EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;
if (handler != null)
{
handler(this, e);
}
}
我们不能直接检查ThresholdReached
是null
吗?
答案 0 :(得分:4)
是的,你可以直接检查null。
这种编码风格有助于解决多线程问题。如果检查ThresholdReached
是否为空,然后另一个线程使其为空,然后您尝试运行处理程序,则它将失败。不太可能,但如果您运行多个线程,则可能。
因此,在此示例中,您首先获得ThresholdReached
的值,以便检查null
并调用它,而不必担心其他线程会混淆两次通话之间的价值。如果您没有多线程问题,那么请务必直接检查null。
你会在各种多线程出现问题的场景中找到这种防御性编码。