1

私はSystem.Threading.Tasks.Parallel.Forいくつかの重い処理を行うために使用しています。

私のコードは次のとおりです。

int count = 10;
List<MyObj> results = new List<MyObj>();

Parallel.For(0, count, (index) =>
{
   MyObj obj = GetMyObjMaybe();

   if (obj != null)
      results.Add(obj);
});

if (results.Contains(null))
{
   //break here, and it does
}

//sometimes contains null objects
return results;
}

リストで null になるとは思いませんが、そうです。どういうわけかの使用を台無しにしているに違いありませんindex。何か案は?

4

1 に答える 1

6

あなたList<MyObj> resultsはスレッドセーフではありません。

results多くの点で無効である可能性があるため、nullが表示されています。

スレッドセーフなコレクションクラスを使用するか、ステートメントを使用してresults自分自身へのすべてのアクセスを保護します。lock

于 2010-10-14T18:53:14.793 に答える