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

mag*_*n94 1 c# linq plinq

我对使用并发性有一些疑问LINQ AsParallel().

假设我有以下代码:

int counter = 0;
someList.AsParallel().ForEach(item => {
    doStuff();
    counter++;
});
Run Code Online (Sandbox Code Playgroud)

我没有找到太多在线...

做这样的事情是否安全?有没有更好的方法呢?

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

提前致谢

bom*_*ing 6

做这样的事情是否安全?(counter++)

没有.

开始时没有线程安全,只有单线程的代码.

并行时,应该确保一切都是线程安全的.
在这种情况下:

//counter++;
Interlocked.Increment(ref counter);
Run Code Online (Sandbox Code Playgroud)

我们无法看到DoStuff()正在做什么.所有调用都应该是独立的(或使用锁定形式).