Parallel.ForEach错误:查询处理器无法启动执行并行查询所需的线程资源

本文关键字:查询 并行 资源 线程 执行 错误 ForEach 处理器 Parallel 启动 | 更新日期: 2023-09-27 18:26:12

在c#中使用TPLParallel.ForEach()方法执行多个线程时遇到问题。多处理访问数据库,我还用using语句包装每个操作,以便在每次执行后处理连接。

我得到的错误是:查询处理器无法启动并行查询执行所需的线程资源

经过大量的谷歌搜索,SQL由于太忙或导致一些内存泄漏而导致资源不足。

我还尝试在Parallel.ForEach()中设置ParallelOptions参数,并设置MaxDegreeOfParallelism=2,但这没有帮助。即

Parallel.ForEach(customerNumbers, cno =>
{
   using (var ctx = new MyContext())
   {
       // do database call
   }
}, new ParallelOptions { MaxDegreeOfParallelism = 2 });

有人能告诉我如何解决这个问题吗?

Parallel.ForEach错误:查询处理器无法启动执行并行查询所需的线程资源

问题不在C#方面,而是在您的SQL Server方面。您的SQL服务器正在拒绝多个同时调用。

请确保:

  1. 您已在连接字符串中打开"多个活动结果集"。请参见此处。(这是最有可能/最讨厌的)
  2. 您仍在达到最大并行度(MAXDOP)。请确保最初将其设置为"0"(即使用所需的所有资源)。如果这有效,但你对0不满意,那么就从那里开始削减
  3. 将您的查询移到SSMS并在那里运行。可能是查询太复杂了,尽管这不太可能。请参阅此处了解更多信息