我有一个管理任务的系统,在一夜之间运行后回到了NullReferenceException; "对象引用未设置为对象的isntance。"
我已经阅读了其他一半的NullReferenceException SO帖子,似乎没有人分享我的问题。在崩溃之前,系统运行完全正常8小时,而调试我可以看到引发异常的行的本地,并且没有任何内容为null。这是一些代码
if (ackList.Count > 0)
{
for (int i = 0; i < ackList.Count; i++)
{
if ((t.taskID == ackList[i].taskID) && (ackList[i].associatedFile != null)) //exception raised on this line
{
//process task as complete
//Locals as below:
//t.taskID = 68941
//i = 30840
//ackList.Count = 30841
//ackList[i].taskID = 68941
//ackList[i].associatedFile = {TaskACKAssociatedFile[1]}
}
}
}
我从前一个dev继承了这个代码,然后循环是一个foreach,当循环运行期间ackList增加时,它会崩溃; ackList存储所有确认消息,并填充在不同的线程中。
异常是从if语句引发的,其中至少在这种情况下没有空值。
编辑:我认为这不是What is a NullReferenceException, and how do I fix it?的完全重复。我的所有对象都已启动,并且所使用的所有对象都不为null。这个问题是询问NRE是什么,我很害羞地知道,并且没有任何答案,即使是那个令人难以置信的彻底的答案,也无助于我。答案 0 :(得分:0)
t 为空,或 ackList [i] 为空。
那个 ackList 对象。这只是一个假设,但是否有可能在另一个线程上的其他地方进行更改?
如果是这样,请尝试使用 lock 以避免此类并发问题。 看看here