मेरे पास कोड का एक टुकड़ा है जो Parallel.ForEach
का उपयोग कर रहा है, शायद आरएक्स एक्सटेंशन या टास्क समांतर लाइब्रेरी के पुराने संस्करण पर आधारित है। मैंने आरएक्स एक्सटेंशन का एक मौजूदा संस्करण स्थापित किया लेकिन Parallel.ForEach
नहीं मिला। मैं पुस्तकालय के किसी भी अन्य फैंसी सामान का उपयोग कर रहा है और सिर्फ इस तरह समानांतर में कुछ डेटा की प्रक्रिया करना चाहते हैं:आरएक्स एक्सटेंशन: समानांतर कहां है। के लिए?
Parallel.ForEach(records, ProcessRecord);
मैं this question पाया, लेकिन मैं आरएक्स के एक पुराने संस्करण पर निर्भर नहीं करना चाहते हैं। लेकिन मैं आरएक्स के लिए कुछ ऐसा नहीं ढूंढ पाया, तो वर्तमान आरएक्स संस्करण का उपयोग करने के लिए वर्तमान और सबसे सीधा आगे क्या तरीका है? परियोजना .NET 3.5 का उपयोग कर रही है।
records.ToObservable()
.SelectMany(x => Observable.Start(() => ProcessRecord(x), Scheduler.ThreadPoolScheduler))
.ToList()
.First();
(या, यदि आप चाहते हैं पर बनाए रखा आइटम के आदेश:
class Parallel
{
public static void ForEach<T>(IEnumerable<T> source, Action<T> body)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (body == null)
{
throw new ArgumentNullException("body");
}
var items = new List<T>(source);
var countdown = new CountdownEvent(items.Count);
WaitCallback callback = state =>
{
try
{
body((T)state);
}
finally
{
countdown.Signal();
}
};
foreach (var item in items)
{
ThreadPool.QueueUserWorkItem(callback, item);
}
countdown.Wait();
}
}
.NET 4.0 में अपग्रेड करें? – dtb
संभावित डुप्लिकेट [समानांतर। .NET 3.5 के लिए प्रतिक्रियाशील एक्सटेंशन से अनुपलब्ध है] (http://stackoverflow.com/questions/7398962/parallel-foreach-missing-from-reactive-extensions-for-net-3-5) –
@ हसन: मैंने आपके द्वारा उल्लिखित प्रश्न से जुड़ा हुआ है, इसलिए मुझे इसके बारे में पता था। लेकिन जवाब पुराने आरएक्स संस्करण का उपयोग करने का प्रस्ताव कर रहा है, जिसे मैं उपयोग नहीं करना चाहता हूं। – Achim