0

看来我的 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 行。

任何帮助将非常感激!

4

0 回答 0