在My Parallel.ForEach循環中,localFinally委託在所有線程上都會被調用。 我發現這是因爲我的平行環路失速而發生的。 在我的並行循環中,我有大約三個在循環完成之前返回的條件檢查階段。而且它似乎是線程從這些階段返回而不是執行整個主體時它不會執行localFinally委託。儘管完成了所有迭代,但並行局部最終會失速
環路結構如下:
var startingThread = Thread.CurrentThread;
Parallel.ForEach(fullList, opt,
()=> new MultipleValues(),
(item, loopState, index, loop) =>
{
if (cond 1)
return loop;
if (cond 2)
{
process(item);
return loop;
}
if (cond 3)
return loop;
Do Work(item);
return loop;
},
partial =>
{
Log State of startingThread and threads
});
我已經運行在一個小數據集的循環,並詳細記錄,並發現,雖然Parallel.ForEach完成所有迭代和日誌在最後本地最後的線程是 - 線程6的調用線程狀態是WaitSleepJoin循環指令16
循環仍然沒有完成並保持停頓...任何線索爲什麼攤位?
乾杯!
可能是某處的死鎖 – Alex
可能只是僞代碼,但cond 3在其當前狀態下永遠不會達到。 if(cond2)在條件周圍沒有括號(所以只有過程(項目)屬於它)。 –
@RobertVerpalen沒有,這只是由於忽略括號而導致的僞代碼中的錯誤... –