using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ParallelTest { public class Parallel { public delegate void Process(); public static void ForEach<T>(IEnumerable<T> enumerable, Action<T> action) { IEnumerator<T> enumerator = enumerable.GetEnumerator(); int threadCount = Environment.ProcessorCount; Process process = delegate() { while (true) { T item = default(T); lock (enumerator) { if (enumerator.MoveNext()) item = enumerator.Current; else return; } action(item); } }; IAsyncResult[] asyncResults = new IAsyncResult[threadCount]; for (int i = 0; i < threadCount; ++i) asyncResults[i] = process.BeginInvoke(null, null); for (int i = 0; i < threadCount; ++i) process.EndInvoke(asyncResults[i]); } } }
sexta-feira, 7 de outubro de 2011
Simple Parallel ForEach in C#.NET 2.0
A simple Parallel ForEach implementation for Microsoft C#.NET 2.0:
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário
Feel free to comment on the immoderately.