在Java中,我可以编写一个Spliterator
接口实现,在其中可以指定将源集合精确地拆分为子集合以进行并行处理的方式。
但是我不知道如何在C#中执行此操作,我只知道可以在AsParallel
上调用IEnumerable
,但是可以控制拆分过程吗?
例如,我的源集合是一个数组,我想将其拆分为5个项目子数组,并希望linq与这些子数组一起使用。这可能吗?
答案 0 :(得分:4)
如果您有特定的分区要求,则应查看Custom Partitioners for PLINQ and TPL和How to: Implement a Partitioner for Static Partitioning。这些给出了如何实现Partitioner<TSource>
的示例,它大概类似于Java的if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.setTheme(android.R.style.Theme_Material_Dialog_NoActionBar_MinWidth);
int color = ResourcesCompat.getColor(activity.getResources(), R.color.background_material_dark_public, null); //without theme
activity.findViewById(android.R.id.content).setBackgroundColor(color);
}
。
但是,在大多数情况下,让框架选择自己的动态分区策略会更有益。如果您要求将并发级别限制为5,则可以使用Spliterator
:
WithDegreeOfParallelism
答案 1 :(得分:0)
当前C#不能像Java一样提供此功能。 C#中的并行任务具有一个MaxDegreeOfParallelism参数,该参数可让您指定ParallelOptions实例启用的最大并发任务数,并自动处理任务数。