似乎我的Parallel.ForEach循环冻结了它的最后一个循环。我正在尝试循环一个字符串数组,这是我的语法,
String [] split = checkerInput.Text.Split('\n');
int threads = Properties.Settings.Default.Threads;
int chunkSize = (split.Count() - 1 + threads - 1) / threads;
ParallelOptions pOptions = new ParallelOptions
{
MaxDegreeOfParallelism = threads,
CancellationToken = cts.Token
};
Parallel.ForEach(Partitioner.Create(1, split.Count() + 1, chunkSize), line =>
{
for (int i = line.Item1; i < line.Item2; i++)
{
try
{
string str = split[i - 1];
//...String stuff...
pOptions.CancellationToken.ThrowIfCancellationRequested();
}
catch (OperationCanceledException)
{
//...Stop stuff...
}
}
}
我在分区器中将split.Count()增加1,因为它似乎错过了数组的最后一行而我减去了i,因此有一个偏移量(因为第1行将被拆分[0],而不是分裂[1])。
它一切正常,直到它到达阵列的最后一行,然后决定吓坏并冻结,没有错误。这很奇怪,因为我有另一个Parallel.ForEach循环,它运行得很好,只有它循环x次,而不是字符串数组中的x行。
非常感谢任何帮助!