C# 自动实现循环

C# 自动实现循环,c#,.net,class,extension-methods,parallel-processing,C#,.net,Class,Extension Methods,Parallel Processing,我不知道标题是否有意义,但在我正在编写的应用程序中有很多(扩展)方法。一个简单的例子: 对象: Matter (Burn, Explode, Destroy, Freeze, Heat, Cool) Atom (Attach, Detach) <many more> 物质(燃烧、爆炸、破坏、冻结、加热、冷却) 原子(附加、分离) 和一个自定义集合,如: ImmutableList<T> 不可变列表 还有像这样的方法: public static class Bur

我不知道标题是否有意义,但在我正在编写的应用程序中有很多(扩展)方法。一个简单的例子:

对象:

Matter (Burn, Explode, Destroy, Freeze, Heat, Cool)
Atom (Attach, Detach)
<many more>
物质(燃烧、爆炸、破坏、冻结、加热、冷却)
原子(附加、分离)
和一个自定义集合,如:

ImmutableList<T>
不可变列表
还有像这样的方法:

public static class Burner
{
    public static Matter Burn ( this Matter matter )
    {
        // matter is burning ...
    }
}

var matters = new ImmutableList<Matter>();
matters.Burn();
公共静态类燃烧器
{
公共静电物质燃烧(该物质)
{
//物质在燃烧。。。
}
}
var matters=新的不可变列表();
重要的事;
如您所见,Burn在单个实体上工作,但仍然显示在ImmutableList上。这样我想自己管理并行化(并行燃烧)

我该如何以最高效的方式、最干净的方式、最易维护的方式或组合方式来实现这一点

首先,我不想定义另一个扩展方法,它在每个类(Burner等)中使用ImmutableList,因为有成百上千个这样的扩展方法,它们看起来可能是一样的。但我对想法持开放态度

此外,所有代码都是我的,因此我可以在代码的任何部分更改/添加任何内容,而不仅仅是扩展方法。

有什么问题吗

matters.ForEach(Burner.Burn);
使用您自己的
ForEach实现

有什么问题

matters.ForEach(Burner.Burn);

使用您自己的ForEach实现?

创建您自己的ForEachParallel扩展,然后如果您不想使用PLinq或其他什么

创建您自己的ForEachParallel扩展,那么如果您不想使用PLinq或其他什么

这里有一个以并行方式迭代的简单类

埃姆雷·艾丁切伦

用法:

Parallel.ForEach(matters,matter=>matter.Burn())

matters.parallelfeach(matter=>matter.Burn())

//
///提供对元素序列的并发处理
/// 
公共静态类并行
{
/// 
///并行任务数
/// 
公共静态整数任务;
静态并行
{
NumberOfParallelTasks=Environment.ProcessorCount<65?Environment.ProcessorCount:64;
}
/// 
///在单独的线程中对序列的每个元素执行指定的操作。
/// 
///源的元素的类型。
///包含要执行操作的元素的序列
///要对IEnumerable的每个元素执行的操作委托。
公共静态void ForEach(IEnumerable源、操作)
{
if(source==null)返回;
//为我们想要运行的并行任务创建一个新的堆栈,该堆栈非常适合按顺序添加和读取元素
var stacks=新堆栈[NumberOfParallelTasks];
//实例化堆栈
对于(VARI=0;i
这里有一个简单的类,它以并行方式进行迭代

埃姆雷·艾丁切伦

用法:

Parallel.ForEach(matters,matter=>matter.Burn())

matters.parallelfeach(matter=>matter.Burn())

//
///提供对元素序列的并发处理
/// 
公共静态类并行
{
/// 
///并行任务数
/// 
公共静态整数任务;
静态并行
{
NumberOfParallelTasks=Environment.ProcessorCount<65?Environment.ProcessorCount:64;
}
/// 
///在单独的thr中对序列的每个元素执行指定的操作
using System.Threading;

// A simple string collection
string[] numbers = { "One", "Two", "Three", "Four", "Five", "Six", "Seven",
  "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen"};

// equivalent to: foreach (string n in numbers)
Parallel.ForEach<string>(numbers, delegate(string n)
{
  Console.WriteLine("n={0}", n.ToString());
});