असीमित अनुक्रम मुश्किल हैं क्योंकि आपको वास्तव में विशेष रूप से के बारे में सोचना है कि आप कोड करना चाहते हैं।
उदाहरण के लिए, आप क्रमिक रूप से AsyncMethodCall
कॉल पर अमल करें, और उसके सभी परिणामों को वापस करना चाहते हो सकता है:
var result = new List<T>();
foreach (var d in xyz)
if (await AsyncMethodCall(d.val))
result.Add(d);
return result;
या, आप सभी AsyncMethodCall
कॉल समवर्ती पर अमल कर सकता है, और फिर इकट्ठा करने और परिणाम वापस (फिर से, सभी को एक बार):
var tasks = xyz.Select(async d => new { d, filter = await AsyncMethodCall(d.val) });
var results = await Task.WhenAll(tasks);
return results.Where(x => x.filter).Select(x => x.d);
या, आप सभी AsyncMethodCall
कॉल क्रमिक रूप से निष्पादित, और एक समय में परिणाम एक उत्पादन कर सकता है। यह दृष्टिकोण IEnumerable<T>
के साथ असंगत है (मान लीजिए कि आप कॉल को एसिंक्रोनस रखना चाहते हैं)। यदि आप एक अनुक्रम बनाना चाहते हैं जहां AsyncMethodCall
अनुक्रमिक गणना के दौरान अतुल्यकालिक रूप से लागू किया गया है, तो आपको IAsyncEnumerable<T>
में बदलना होगा।यदि आप उपभोक्ता द्वारा शुरू करने के अनुक्रम का उत्पादन करना चाहते हैं और उसके बाद परिणाम स्वयं उत्पन्न करते हैं, तो आपको IObservable<T>
में बदलना होगा।
या, आप एक साथ में सभी AsyncMethodCall
कॉल निष्पादित कर सकते हैं, और परिणाम एक समय में उत्पन्न कर सकते हैं। यह IEnumerable<T>
के साथ भी असंगत है; आपको IObservable<T>
में बदलना होगा। और आपको यह तय करने की भी आवश्यकता होगी कि मूल क्रम को बनाए रखना है या AsyncMethodCall
पूरा करने के लिए उन्हें उत्पादन करना है या नहीं।
स्रोत
2017-05-11 20:24:05
* फ़िल्टर * कहां है। यह * फिल्टर * चीजों को माना जाता है, यादृच्छिक परिवर्तन नहीं करते हैं। आप इसमें एक एसिंक्रोनस विधि का उपयोग क्यों कर रहे हैं? क्या आप इसका उपयोग कर रहे हैं जैसे कि यह * चयन * कथन था? –
@PanagiotisKanavos उदाहरण के लिए यह एक वेब सेवा कॉल कर सकता है, या डीबी तक पहुंच सकता है ... सवाल अच्छा है ... आप इसे नहीं कर सकते हैं, और यहां तक कि अगर आप शायद यह एक अच्छा विचार नहीं होगा, लेकिन वह एक और समस्या है ... – xanatos
@xanatos तथ्य यह एक बुरा विचार है शायद आप ऐसा क्यों नहीं कर सकते हैं, यानी कोई 'कहां()' विधि क्यों नहीं है जो एक कार्य –