Parallel.For/ForEach ループを実行するときに使用されるスレッドの数を知りたいです。
MaxDegreeOfParallelism オプションで変更できることがわかりました。
MSDN の MaxDegreeOfParallelism ヘルプ (リンク):
デフォルトでは、For と ForEach は基礎となるスケジューラーが提供する多くのスレッドを利用するため、MaxDegreeOfParallelism をデフォルトから変更しても、使用される同時タスクの数だけが制限されます。
しかし、基礎となるスケジューラーが提供するスレッドの数はわかりません。
どうすればそれを知ることができますか?
9999999 回の実行でループをテストできますが、このテストでは数値が表示されますが、その数値を決定するルールは表示されません。
後で編集/追加:
「sheduler max concurrency」をグーグルで検索したところ、(MSDNで-リンクで)そのTashSheduler
クラスにMaximumConcurrencyLevel
プロパティがあり、次のことがわかりました。
最大同時実行レベルを表す整数を返します。デフォルトのスケジューラは Int32.MaxValue を返します。
その TaskSheduler クラスは、これらの並列ループの「基になるスケジューラ」として使用されますか?