Parallel.ForEach在最后一个循环中冻结

时间:2013-06-24 02:33:11

标签: c# multithreading parallel-processing

似乎我的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行。

非常感谢任何帮助!

0 个答案:

没有答案