2011-08-22 8 views
8

किसी को भी पता है कि कोई ओवरलोड है जो मुझे समानांतर में एक चरण आकार निर्दिष्ट करने की अनुमति देगा। लूप के लिए? सी # या वीबी.Net में नमूने बहुत अच्छे होंगे।समांतर। चरण आकार

धन्यवाद, गोंजालो

उत्तर

15

"enumerable.range कदम" और आप Enumerable.Range की वैकल्पिक कार्यान्वयन कि कदम रखा पर्वतमाला प्रदान पर आने के लिए सक्षम होना चाहिए के लिए गूगल। तो फिर तुम सिर्फ कर सकते हैं एक

Parallel.ForEach(BetterEnumerable.SteppedRange(fromInclusive, toExclusive, step), ...) 

गूगल से काम नहीं कर रहा है, तो कार्यान्वयन कुछ इस तरह होना चाहिए:

public static class BetterEnumerable { 
    public static IEnumerable<int> SteppedRange(int fromInclusive, int toExclusive, int step) { 
     for (var i = fromInclusive; i < toExclusive; i += step) { 
      yield return i; 
     } 
    } 
} 

वैकल्पिक रूप से अगर "उपज वापसी" एक heebie jeebies देता है, तो आप हमेशा सिर्फ कर सकते हैं जगह में एक नियमित पुरानी सूची बनाएं:

var list = new List<int>(); 
for (int i = fromInclusive; i < toExclusive; i += step) { 
    list.Add(i); 
} 
Parallel.ForEach(list, ...); 

यह आवश्यकता होने पर वीबी के लिए आसानी से अनुवाद योग्य होना चाहिए।

+0

धन्यवाद डैक्स। अगर मैं वीबी.Net में ऐसा करने की कोशिश कर रहा हूं तो क्या यह कोई अतिरिक्त काम नहीं होगा जहां कोई उपज वापसी नहीं है? – Gonzalo

+0

कोई वीबी अनुभव नहीं है, लेकिन आपको आवश्यकता वाले पूर्णांक के साथ पूर्णांक की सूची बनाने के लिए लूप का उपयोग करने में सक्षम होना चाहिए, और उसके बाद उस सूची के साथ 'समांतर। फोरेच' का उपयोग करना चाहिए। –

+0

@ गोंजालो: [async सीटीपी] (http://www.microsoft.com/download/en/details.aspx?id=22388) VB.NET में पुनरावृत्तियों के उपयोग को सक्षम बनाता है। – jason