【C# Parallel】ParallelOptions
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); });
编程是个人爱好