并行处理,内循环,我们可以访问并行度吗?

时间:2017-04-10 06:20:24

标签: c# asp.net multithreading parallel-processing parallel-foreach

在下面的循环中,我想添加逻辑来说明处理器1是否执行此操作,如果处理器2执行此操作等等。我一直在尝试各种属性,如...

Console.WriteLine("Domain ID = " + Thread.GetDomainID().ToString());
Console.WriteLine("Thread ID = " + Thread.CurrentThread.ManagedThreadId.ToString());

...但是我看到线程ID正在向上和向上计数,所以它的线程处理器的许多线程。那么如何让循环中的1-4? DomainID我得到相同的值

Parallel.ForEach(list.OrderBy(n => n.ScheduledBillingId),
    new ParallelOptions { MaxDegreeOfParallelism = 4  }, (item) => { });

我的问题是我希望能够将列表中的记录拆分为4组,处理1处理前25%,依此类推。

1 个答案:

答案 0 :(得分:1)

对于您的工作和Parallel.ForEach,您可以使用partitioner for your list,如下所示:

// Partition the entire source array.
var rangePartitioner = Partitioner.Create(0, list.Count);

之后,您只需为循环提供该分区程序:

Parallel.ForEach(rangePartitioner, (range, loopState) =>
{
    // Loop over each range element without a delegate invocation.
    for (var i = range.Item1; i < range.Item2; ++i)
    {
        var taskToRun = list[i];
    }
});

由于您希望将任务拆分为4组,因此只需要proper overload

var rangePartitioner = Partitioner.Create(0, source.Length, source.Length / 4);