Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PLINQ查询给出溢出异常_C#_Linq_Task Parallel Library_Plinq - Fatal编程技术网

C# PLINQ查询给出溢出异常

C# PLINQ查询给出溢出异常,c#,linq,task-parallel-library,plinq,C#,Linq,Task Parallel Library,Plinq,我正在运行PLINQ查询,如下所示: ParallelQuery<string> winningCombos = from n in nextComboMaker.GetNextCombo() .AsParallel().WithCancellation(_cancelSource.Token) whe

我正在运行PLINQ查询,如下所示:

ParallelQuery<string> winningCombos = from n in nextComboMaker.GetNextCombo()
                                              .AsParallel().WithCancellation(_cancelSource.Token)
                                              where ComboWasAWinner(n) 
                                              select n;

ConcurrentBag<string> wins = new ConcurrentBag<string>();

foreach (var winningCombo in winningCombos)
{
        wins.Add(winningCombo);
        if (wins.Count == _maxWinsAllowed)
            break;
}
我想知道我是否可以做些什么来将此查询更改为不溢出、按任何顺序执行操作等。可能没有让linq查询执行where和select操作,尽管我尝试过这样做:

 var query = nextComboMaker.GetNextCombo().AsParallel();

 query.ForAll(x => if(ComboWasAWinner(x) wins.Add(x) );

仍然是相同的溢出。

您应该能够通过使用自定义分区器来解决此问题。在这种情况下,PLINQ选择的默认分区器仅支持整数范围内的项数


请参阅以了解如何执行此操作。

对我来说似乎不起作用,您必须这样做。我正在并行处理的IEnumerable上的ToArray或ToList(),一旦大小大于int,将产生堆栈溢出。我可以具体重写什么以使其具有长计数?
 var query = nextComboMaker.GetNextCombo().AsParallel();

 query.ForAll(x => if(ComboWasAWinner(x) wins.Add(x) );