我基本上在做的是在一系列字母组合上并行迭代,当我得到我想要的组合时,它被认为是胜利。我想从这个查询中获得所有的胜利(它做得正确),但诀窍是如何跟踪执行胜利测试的次数(基本上是返回真/假的方法,它赢了)。
我正在类中创建一个实例变量,每次执行组合测试时都会递增,但每次运行该过程时,我都会为该实例变量获得不同的数字。我意识到这是一个线程问题,但我不确定如何解决它。
当遇到此问题时,查询需要停止的获胜次数有一个最大限制。如果我没有那个约束,我显然不需要知道组合运行的次数,因为它会运行所有组合,但是正如你所见,当我达到最大值时我需要中断查询限制。
public Results GetWinResults()
{
ParallelQuery<string> winningCombos = from n in _nextCombination.GetNextCombo().AsParallel()
where processNextCombo(n) // where there was a win
select n;
List<string> wins = new List<string>();
foreach (var winningCombo in winningCombos)
{
wins.Add(winningCombo);
if (wins.Count == winsMaxLimit)
break;
}
return new Results { Wins = wins, CombosTried = totalCombosRun };
}
private bool processNextCombo(string combo)
{
totalCombosRun++;
// do tests to see if combo was a winner
if (didWin)
return true;
return false;
}