私は、.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