LINQ AsParallel()是否保留线程安全性?

时间:2018-06-28 10:25:42

标签: c# linq plinq

我对使用LINQ AsParallel()的并发性有疑问。

假设我有以下代码:

int counter = 0;
someList.AsParallel().ForEach(item => {
    doStuff();
    counter++;
});

我在网上找不到太多...

这样做是安全的吗?有更好的方法吗?

我应该为counter做一些锁定动作吗?

预先感谢

1 个答案:

答案 0 :(得分:6)

  

这样做是安全的吗? (counter++

否。

一开始没有线程安全,只有单线程代码。

并行操作时,应确保所有内容都是线程安全的。
在这种情况下:

//counter++;
Interlocked.Increment(ref counter);

我们看不到DoStuff()在做什么。所有调用都应独立(或使用锁定形式)。