【发布时间】:2011-04-16 19:19:32
【问题描述】:
我正在查看 VS2010 Concurrency Profiler 的输出,我注意到我在一些 LINQ 运算符周围遇到了一些线程争用。以下是引起争用的语句:
m_dictionary.PermutableSubunits.Select(subunit => subunit.Number).ToArray()
LINQ 运算符会阻塞吗?在作为 Parallel.ForEach 的一部分运行的任务中使用它们时我应该更加小心吗?
【问题讨论】:
-
您的意思是 LINQ 运算符,我希望它是单线程的还是使用线程池的 PLINQ 运算符?我不确定我是否理解您的问题。
-
我的意思是 LINQ 运算符(如上面的 Select() 和 ToArray()),而不是 PLINQ(请注意上面没有 .AsParallel())。上面的代码在由 Parallel.ForEach 方法启动的 Task
中运行。这就是你想知道的吗?
标签: linq concurrency task-parallel-library parallel-extensions