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