1

在接下来的循环中,我要添加的逻辑说,如果处理器1,那么做到这一点,如果处理器2做等等。我一直在尝试不同的属性,如...并行处理,内部循环,我们可以访问并行度吗?

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

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

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

我的问题是我希望这能够在列表中的记录与前25%等分成4组,处理1个交易。

+2

我愿意通过y建议不要在asp.net代码中使用'parallel.foreach' - asp.net已经尝试使用线程池同时处理多个*请求*。 –

+0

如果你想在每个线程中做一些不同的事情,那么'Parallel.ForEach'可能不是正确的工具。你能澄清一下你需要什么,为什么?例如,如果你有你正在搜索的信息,你能否显示你会写什么样的代码? –

+0

的foreach(在list.OrderBy ScheduledBilling项目(N => n.ScheduledBillingId)){ } 我只是想有这样的Web作业过程的不同批次这份名单并行,加快了这一切。自始至终缓慢 – John

回答

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);