データのセットを並行して処理する状況があります。最終的に、正常に処理されたデータの合計数を知りたいです。http://msdn.microsoft.com/en-us/library/dd460703.aspxおよびhttp://reedcopsey.com/2010/01/22/parallelism-in-netのサンプルに従って、次のダミー コードが付属しています。 -part-4-命令型データ並列処理集計/
public void DoWork2()
{
int sum = 0;
Parallel.For<int>(0, 10,
() => 0,
(i, lockState, localState) =>
{
DummyEntity entity = DoWork3(i);
if (entity != null)
{
Console.WriteLine("Processed {0}, sum need to be increased by 1.", i);
return 1;
}
else
{
Console.WriteLine("Processed {0}, sum need to be increased by 0.", i);
return 0;
}
},
localState =>
{
lock (syncRoot)
{
Console.WriteLine("Increase sum {0} by {1}", sum, localState);
sum += localState;
}
}
);
Console.WriteLine("Total items {0}", sum);
}
private DummyEntity DoWork3(int i)
{
if (i % 2 == 0)
{
return new DummyEntity();
}
else
{
return null;
}
}
ただし、実行するたびに結果が変わります。コードに何か問題があると思います。しかし、理由を理解できませんでした。