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