其中Sessions
是Dictionary<Guid, WebSession>
,而NewSession
是new WebSession()
我有这一行:
Sessions.Add(NewSession.SessionID, NewSession);
现在,在这一点上,你可能正在滚动你的眼球,并且“认为Sessions为null,或者NewSession.SessionID为null”。但是:
Sessions == null
false
NewSession.SessionID == null
false
NewSession == null
false
这是非常间歇性的。可能在50中发生过一次。无论何时发生,我都可以在即时窗口中进行Sessions.Add(NewSession.SessionID, NewSession);
并且工作正常。
WebSession
的构造函数是同步的,Sessions
是一个没有添加糖的香草字典。
我很确定我已经做了尽职调查。在我的应用程序中发生这种情况是无害的,并且它被困住并且处理得很干净 - 但我首先要知道是什么导致它。
编辑:我想知道是不是因为我的WebSession
继承了: Dictionary<String, Object>
,但是它的构造函数没有调用base()
- 但是我仍然无法解释它,因为我可以检查一下在执行Add(..)
答案 0 :(得分:7)
您需要使用线程安全的集合,例如ConcurrentDictionary,或者实现您自己的同步。
尝试从多个线程访问Dictionary<TKey,TValue>
可能会产生heisenbug,这可能表现为NullReferenceException
。