Пока я работаю над параллелизмом нашей структуры, я столкнулся с странным состоянием, которое я не могу себе представить, почему! Я упростил ситуацию, чтобы описать ее легко. рассмотреть этот код:Модификация локальной переменной до нуля, через другой поток, как это возможно
foreach(var person in personList)
{
if (person.Name == "Mehran")
break;
}
которой personList
разделяется между несколькими потоками.
В каких случаях это возможно для person
быть null
и я получаю NullReferenceException
для person.Name
?
Как я знаю, человек рассматривается как локальная переменная здесь, и если мы получим в foreach
блок, поэтому мы итерация в personList
успешно, поэтому person
не должно быть пустым ни при каких обстоятельствах или любого параллельного сценария.
Даже если personList
изменен другой нитью или указанная ссылка person
, переменная person
должна иметь значение. Поскольку никто не имеет доступа к изменениям, на которые ссылается person
.
Есть ли какой-либо сценарий для объяснения ситуации?
Wooops! списки могут принимать значения null! Параллельные ситуации заставляли меня думать сложнее, чем требовалось! Большое спасибо. – mehrandvd
Да, я знаю о проблемах изменения списка в параллельных ситуациях. Я думаю, ваш простой и быстрый ответ разрешит его. Я проверю наличие возможных нулей в списке. – mehrandvd