IEnumerable(リスト)に次の順序がある場合:
1-2-3-4-5
そして、これに対してPLINQクエリを実行すると、次のようになります。
list.AsParallel().AsOrdered().WithDegreeOfParallelism(10).Select(
s => SomeDelegateFunction(s)).AsSequential().ToList();
上記のクエリの場合、ログ(デリゲート関数内)で複数のスレッドを使用していることがわかりますが、リストの処理順序は維持されていません。ただし、以下のクエリでは、シーケンスを維持しますが、単一のスレッドを使用して操作全体を実行します。
list.AsParallel().AsOrdered().WithDegreeOfParallelism(10).AsSequential().Select(
s => SomeDelegateFunction(s)).ToList();
2つのクエリの違いは、2番目のクエリの「AsSequential()」です。私が持っていた質問は、AsSequential()を使用する場合です。
1-マルチスレッドを使用しないのはなぜですか?それは次のように作業を分解した可能性があります:
1 - 2 (Give it to thread 1)
3 - 4 - 5 (Give it to thread 2)
代わりに、1〜2〜3〜4〜5(この順序で)を実行しますが、単一のスレッドで実行します-なぜですか?
基本的に、リストを入力として受け取ったORDERで処理する必要がありますが、複数のスレッドで処理する必要があります。
何か案は ?