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());
});