Edit

Share via


ParallelOptions.MaxDegreeOfParallelism Property

Definition

Gets or sets the maximum number of concurrent tasks enabled by this ParallelOptions instance.

public:
 property int MaxDegreeOfParallelism { int get(); void set(int value); };
public int MaxDegreeOfParallelism { get; set; }
member this.MaxDegreeOfParallelism : int with get, set
Public Property MaxDegreeOfParallelism As Integer

Property Value

An integer that represents the maximum degree of parallelism.

Exceptions

The property is being set to zero or to a value that is less than -1.

Remarks

The MaxDegreeOfParallelism property affects the number of concurrent operations run by Parallel method calls that are passed this ParallelOptions instance. A positive property value limits the number of concurrent operations to the set value. If it is -1, there is no limit on the number of concurrently running operations (with the exception of the ForEachAsync method, where -1 means ProcessorCount).

By default, For and ForEach will utilize however many threads the underlying scheduler provides, so changing MaxDegreeOfParallelism from the default only limits how many concurrent tasks will be used.

Generally, you do not need to modify this setting. However, you may choose to set it explicitly in advanced usage scenarios such as these:

  • When you know that a particular algorithm you're using won't scale beyond a certain number of cores. You can set the property to avoid wasting cycles on additional cores.

  • When you're running multiple algorithms concurrently and want to manually define how much of the system each algorithm can utilize. You can set a MaxDegreeOfParallelism value for each.

  • When the thread pool's heuristics is unable to determine the right number of threads to use and could end up injecting too many threads. For example, in long-running loop body iterations, the thread pool might not be able to tell the difference between reasonable progress or livelock or deadlock, and might not be able to reclaim threads that were added to improve performance. In this case, you can set the property to ensure that you don't use more than a reasonable number of threads.

Applies to