我已經習慣了在.Net的並行擴展中使用Parallel.For(),因爲它是一種並行代碼的簡單方法,無需手動啓動和維護線程(可以很費力)。我現在正在尋找一個無限循環(做一些事情,直到我指示它停止),我希望並行化,沒有一個可用的參數Parallel.For()重載來做到這一點,所以想知道這裏最好的方法是什麼是。原則上我可以這樣做:(?)實現並行無限循環的最佳方式是什麼?
Parallel.For(0, int.Max)
但我懷疑可能不是工作劃分邏輯來處理
另一種選擇的預期/高效的模式是這樣的:
for(;;)
{
Parallel.For(0, 128, delegate()
{
// Do stuff.
}
}
但是,這似乎不雅,也可能導致低效的工作分區。
現在我的直覺是通過創建和維護我自己的線程來手動完成此操作,但是我希望獲得關於此的一些反饋/意見。謝謝。
=== UPDATE ===
我使用的是從接受的答案的文章的代碼的簡化版本(我已經刪除了ParallelOptions參數)。下面的代碼...
public class ParallelUtils
{
public static void While(Func<bool> condition, Action body)
{
Parallel.ForEach(IterateUntilFalse(condition), ignored => body());
}
private static IEnumerable<bool> IterateUntilFalse(Func<bool> condition)
{
while (condition()) yield return true;
}
}
一個例子用法是:
Func<bool> whileCondFn =() => !_requestStopFlag;
ParallelUtils.While(whileCondFn, delegate()
{
// Do stuff.
});
在那裏,你可以消耗 – MethodMan 2011-12-29 18:30:05