使用Parallel Invoke处理时某些数据丢失

时间:2015-07-03 08:28:10

标签: c# .net parallel-processing console-application

我在下面写了一些代码:

_concurentModels = new ConcurrentQueue<ScanOutletBarcodeModel>();
models.ToList().ForEach(m => _concurentModels.Enqueue(m));
Parallel.Invoke(ProcessInParalel);

private void ProcessInParalel()
{
    Action[] actions;

    if (_concurentModels.Count > 0)
    {
        actions = new Action[GlobalVariable.ProcessorCount];
        for (int i = 0; i < GlobalVariable.ProcessorCount; i++)
        {
            actions[i] = (ThreadProcess);
        }

        Parallel.Invoke(actions);
    }

    Thread.Sleep(1000);
}

private void ThreadProcess()
{
   while (_concurentModels.TryDequeue(out model))
   {
       //proceed model
   } 
}

当我设置GlobalVariable.ProcessorCount = 16时,进程正在正常运行(所有处理的模型列表)但如果我增加处理器数量超过20,则某些模型记录似乎丢失且未处理。它在我的脑海里很奇怪,增加线程会让一些数据丢失吗?

我增加处理器数量的原因是性能问题。我的代码有什么问题吗?

感谢。

0 个答案:

没有答案