gpt4 book ai didi

c# - NullReferenceException 添加到字典中 - 非常确定没有什么是空的

转载 作者:太空狗 更新时间:2023-10-29 21:28:30 24 4
gpt4 key购买 nike

在哪里SessionsDictionary<Guid, WebSession> , 和 NewSessionnew WebSession()我有这一行:

Sessions.Add(NewSession.SessionID, NewSession);

此时您可能正在转动眼球并思考“要么 Sessions 为空,要么 NewSession.SessionID 为空”。然而:

Sessions == null
false
NewSession.SessionID == null
false
NewSession == null
false

这是断断续续的。可能每 50 次发生一次。无论何时发生,我都可以做 Sessions.Add(NewSession.SessionID, NewSession);在即时窗口中,它工作正常。

WebSession 的构造函数是同步的,Sessions是一个没有添加糖分的 Vanilla 字典。

我很确定我已经在这一点上进行了尽职调查。它在我的应用程序中发生是一件无害的事情,它被捕获并干净利落地处理 - 但我对首先导致它的原因感到困惑。

编辑:我想知道是不是因为我的 WebSession继承: Dictionary<String, Object>但它的构造函数不调用 base() - 这仍然无法解释它,因为我可以在执行 Add(..) 之前检查对象是否为空

最佳答案

你需要使用线程安全的集合,比如ConcurrentDictionary ,或实现您自己的同步。

正在尝试访问 Dictionary<TKey,TValue>来自多个线程可能会导致 heisenbugs,这很可能表现为 NullReferenceException .

关于c# - NullReferenceException 添加到字典中 - 非常确定没有什么是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15189617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com