C# PLINQ查询给出溢出异常
我正在运行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
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) );