当我在处理我们的框架的并行性时,我遇到了一个奇怪的情况,我无法想象这是为什么!我简化了情况以简单地描述它。考虑这段代码:
foreach(var person in personList)
{
if (person.Name == "Mehran")
break;
}
它personList
在多个线程之间共享。
在什么情况下有可能person
是null
并且我得到了NullReferenceException
for person.Name
?
据我所知,这个人在这里被认为是一个局部变量,如果我们进入foreach
块,那么我们已经personList
成功地迭代了,所以person
在任何情况下或任何并行情况下都不应该为空。
即使personList
被另一个线程更改,或者被引用person
的被释放,person
变量也应该有一个值。因为没有人可以更改person
引用的位置。
有什么场景可以解释这种情况吗?