ParallelOptions 構造函數
此構造函數用默認值初始化實例。 MaxDegreeOfParallelism 初始化為-1,表示沒有對應采用的並行度進行上限設置。 CancellationToken 初始化為不可取消的標記,並 TaskScheduler 初始化為默認計划程序 (TaskScheduler) 。
所有這些默認值都可以使用實例上的屬性集訪問器進行覆蓋。
屬性
MaxDegreeOfParallelism:獲取或設置此 ParallelOptions 實例所允許的並發任務的最大數目。
MaxDegreeOfParallelism屬性影響通過 Parallel 此實例傳遞的方法調用所運行的並發操作的數量 ParallelOptions 。 屬性值為正會將並發操作數限制為所設置的值。 如果為-1,則對並發運行的操作的數量沒有限制。
默認情況下, For 和 ForEach 將使用基礎計划程序提供的多個線程,因此, MaxDegreeOfParallelism 從默認值更改僅限制將使用的並發任務數。
通常情況下,不需要修改此設置。 但是,你可以選擇在高級使用方案中顯式設置此項,例如:
-
當你知道所使用的特定算法不能擴展到超出一定數量的內核時。 可以設置屬性,以避免在額外的內核上浪費循環。
-
同時運行多個算法,並希望手動定義每個算法可以利用的系統量。 可以 MaxDegreeOfParallelism 為每個設置一個值。
-
當線程池的試探法無法確定要使用的正確線程數時,可能最終會注入太多線程。 例如,在長時間運行的循環正文迭代中,線程池可能無法判斷合理進度或 livelock 或死鎖之間的差異,並且可能無法回收添加的線程以提高性能。 在這種情況下,可以設置屬性以確保使用的線程數不超過合理。
案例
//paralle TaskScheduler taskScheduler = TaskScheduler.Default; CancellationTokenSource cts=new CancellationTokenSource(); ParallelOptions paraOP = new() { MaxDegreeOfParallelism = 2}; paraOP.TaskScheduler = taskScheduler; paraOP.CancellationToken = cts.Token; Parallel.For(1,10,paraOP,i =>{ Console.WriteLine(i+ "ThreadId" + Environment.CurrentManagedThreadId); });