Bu sizin için çalışır mı?
public static class Parallel
{
public static void ForEach<T>(IEnumerable<T>[] sources,
Action<T> action)
{
foreach (var enumerable in sources)
{
ThreadPool.QueueUserWorkItem(source => {
foreach (var item in (IEnumerable<T>)source)
action(item);
}, enumerable);
}
}
}
// sample usage:
static void Main()
{
string[] s1 = { "1", "2", "3" };
string[] s2 = { "4", "5", "6" };
IEnumerable<string>[] sources = { s1, s2 };
Parallel.ForEach(sources, s => Console.WriteLine(s));
Thread.Sleep(0); // allow background threads to work
}
C# 2.0 için, yukarıdaki lambda ifadelerini delegelere dönüştürmeniz gerekir.
Not: Bu yardımcı program, arka plan iş parçacığı kullanır. Ön plan iş parçacığı kullanmak için değiştirmek isteyebilirsiniz ve muhtemelen tüm iş parçacıkları bitirene kadar beklemek isteyeceksiniz. Bunu yaparsanız, sources.Length - 1
iş parçacığı oluşturmanızı ve son (veya ilk) kaynak için geçerli yürütme iş parçacığını kullanmanızı öneririm.
(Ben ipler benim kodunda bitmesini bekleyen dahil isterdim, ama ben henüz. Sana bir WaitHandle
Thread.Join()
. Kullanmalıdır tahmin Bunun nasıl yapılacağını bilmiyorum üzgünüm)
wouldn' Bir döngü, aşağıdaki Kombine yanıtı yerine daha basit, daha kısa, okunabilir bir çözüm olabilir mi? Bu durumda foreach tercih nedenleriniz nelerdir – Gishu
Ayrıca paralel iterasyon sadece Ruby 1.9'da ortaya çıktı, bu yüzden şu anda C# olmamaya bahse girerim. LISP bunu olsa da :) – Gishu
Anladığımdan emin değilim doğru soru sor. Paralel olarak birden fazla numarada yineleme yapmaya mı çalışıyorsunuz yoksa paralel olarak farklı öğeleri işleyen bir numaralandırmaya mı çalışıyorsunuz? –