看来我的 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...
}
}
}
我在 Partitioner 中将 split.Count() 加一,因为它似乎错过了数组的最后一行,我将 i 减一,这样就有一个偏移量(因为第 1 行将是 split[0],而不是 split[1 ])。
一切都很好,直到它到达数组的最后一行,然后决定发疯并冻结而没有错误。这很奇怪,因为我有另一个 Parallel.ForEach 循环工作得很好,只是它循环了 x 次,而不是字符串数组中的 x 行。
任何帮助将非常感激!