フレームワークの並列化に取り組んでいるときに、理由が想像できない奇妙な状態に直面しました! 簡単に説明するために状況を単純化しました。このコードを検討してください:
foreach(var person in personList)
{
if (person.Name == "Mehran")
break;
}
複数のスレッド間でpersonList
共有されます。
どのような状況で forperson
になることができnull
、私はNullReferenceException
forを取得できperson.Name
ますか?
私が知っているように、人物はここではローカル変数と見なされ、ブロックに入った場合、正常にforeach
反復されたので、どのような状況または並列シナリオでも null であってはなりません。personList
person
personList
が別のスレッドによって変更された場合や、参照先person
が破棄された場合でも、person
変数には値が必要です。person
が参照されている場所を変更するアクセス権を誰も持っていないためです。
状況を説明するシナリオはありますか?