这是一个MWE:
Func<Int32, Boolean> MyFunc = (s) => {
var res = false;
// Insert function logic to modify the value to res
return res;
};
var Result = new List<Int32> ();
var LockObj = new Object ();
ParallelEnumerable.Range (1, 100000)
.ForAll (s => {
if (MyFunc (s)) {
lock (LockObj) { // IS THIS NECESSARY?
Result.Add (s);
} // End lock
}
});
这就是情况归结为。如果我不打算在 ParallelEnumerable 语句完成执行之前查询它,我是否认为我不需要锁定 Result 是否正确?
请注意:我知道 MWE 可以通过“Where”子句更好地解决,如下所示:
ParallelEnumerable.Range (1, 100000)
.Where (s => MyFunc (s));
但由于 MWE 中不明显的原因,无法做到这一点。
编辑
感谢所有回答的人。也感谢您的评论。我已经纠正了 Tung 发现的错误。