ThreadPool中的C#并行线程

时间:2012-03-01 08:12:25

标签: c# multithreading parallel-processing

我将以下方法分配给多核处理器以执行任务,但是,在Windows任务管理器中,它仅显示仅使用一个特定核心。如何使这5个线程并行?

private void ActivateProcess
{
   ...
   ThreadPool.QueueUserWorkItem(new WaitCallback(Worker1));
   ThreadPool.QueueUserWorkItem(new WaitCallback(Worker2)); 
   ThreadPool.QueueUserWorkItem(new WaitCallback(Worker3));
   ThreadPool.QueueUserWorkItem(new WaitCallback(Worker4));
   ThreadPool.QueueUserWorkItem(new WaitCallback(Worker5));
}

...

private void Worker1(Object stateInfo)
{
    try
    {
        //for (int i = 0; i < _NumberOfLoop; i++)
        Parallel.For(0,(long)_NumberOfLoop, i =>
        {
            if (_ForceToStop)
                throw new System.ArgumentException(
                    "Force stop at WorkerThread 1", "Aborted");

            // Process: Process a tasks
            ...
        });

    }
    catch (Exception ex)
    {
        ...
    }
}

1 个答案:

答案 0 :(得分:1)

很难说这段代码。你甚至有两层并行,所以“它应该工作”。

答案必须在// Process: Process a tasks - 它可能挂在一个共同的非共享资源上。

如果“任务”中的代码是独立且CPU密集的,您应该看到所有核心都忙碌。但是当你试图用Sleep()模拟它时,你不会在TaskManager中看到任何事情。