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