Quanti thread Parallel.For (Foreach) creerà? Default MaxDegreeOfParallelism?

Voglio sapere quanti thread verranno utilizzati quando eseguirò il ciclo Parallel.For / ForEach.

Ho scoperto che può essere modificato dall’opzione MaxDegreeOfParallelism.

Aiuto MaxDegreeOfParallelism su MSDN dice ( collegamento ):

Per impostazione predefinita, For and ForEach utilizzerà comunque molti thread forniti dallo scheduler sottostante, pertanto la modifica di MaxDegreeOfParallelism dall’impostazione predefinita limita il numero di attività concorrenti che verranno utilizzate.

Ma non so quanti thread sottostanti fornisce lo scheduler.

Come posso scoprirlo?

Potrei testarlo con loop con 9999999 esecuzioni, tuttavia questo test mi mostrerà il numero, ma non la regola che determina quel numero.

Modifica / aggiunto in seguito:

Ho cercato su google “concorrenza massima sheduler” e ho trovato (al link MSDN), che la class TashSheduler ha la proprietà MaximumConcurrencyLevel e:

Restituisce un numero intero che rappresenta il livello di concorrenza massimo. Lo scheduler predefinito restituisce Int32.MaxValue.

Quella class TaskSheduler è usata come “schedulatore sottostante” per questi loop paralleli?

Secondo MSDN :

L’utilità di pianificazione predefinita per Task Parallel Library e PLINQ utilizza .NET Framework ThreadPool per accodare ed eseguire il lavoro. In .NET Framework 4, ThreadPool utilizza le informazioni fornite dal tipo System.Threading.Tasks.Task per supportare in modo efficiente il parallelismo a grana fine (unità di lavoro di breve durata) che spesso le attività e le query parallele rappresentano.

Guardando la documentazione di ThreadPool , si dice:

Esiste un pool di thread per processo. A partire da .NET Framework 4, la dimensione predefinita del pool di thread per un processo dipende da diversi fattori, come la dimensione dello spazio degli indirizzi virtuali. Un processo può chiamare il metodo GetMaxThreads per determinare il numero di thread. Il numero di thread nel pool di thread può essere modificato utilizzando il metodo SetMaxThreads .