ऐसा लगता है कि आप वास्तव में क्या देख रहे हैं IObservable<T>
, जो पुश-आधारित एसिंक्रोनस IEnumerable<T>
जैसा है। माइक्रोसॉफ्ट ओपन टेक्नोलॉजीज (अपाचे-2.0 के तहत लाइसेंस प्राप्त कोड) (कोई संबद्धता) से IObservable<T>
के साथ काम करने के लिए LINQ-to-Objects और अधिक जैसे काम करने के लिए देखें।
IEnumerable<T>
के साथ समस्या यह है कि वास्तव में यह नहीं है कि वास्तव में गणना स्वयं को असंकालिक बनाती है। आप आरएक्स पर निर्भरता को जोड़ने के लिए (जो वास्तव में क्या IObservable<T>
बेहतर बनाता है) नहीं करना चाहते हैं, इस विकल्प आप के लिए काम कर सकते हैं:
public async Task<IEnumerable<char>> TestAsync(string testString)
{
return GetChars(testString);
}
private static IEnumerable<char> GetChars(string testString)
{
foreach (char c in testString.ToCharArray())
{
// do other work
yield return c;
}
}
हालांकि मैं बाहर बात करने के लिए है कि क्या वास्तव में है जानने के बिना करना चाहते हैं असीमित रूप से किया जा रहा है, आपके लक्ष्यों को पूरा करने के लिए एक बेहतर तरीका हो सकता है। आपके द्वारा पोस्ट किए गए कोड में से कोई भी वास्तव में असीमित रूप से कुछ भी नहीं करेगा, और मुझे वास्तव में पता नहीं है कि // do other work
में कुछ भी अतुल्यकालिक है (इस स्थिति में, यह आपकी अंतर्निहित समस्या का समाधान नहीं है हालांकि यह आपके कोड को संकलित करेगा)।
स्रोत
2014-04-28 11:00:59
ध्यान दें कि यह केवल इतना कहता है कि * पहली जगह में गणना करने योग्य * एसिंक है - यह इसे एसिंक एन्युमरेटर का कोई भी प्रकार नहीं बनाता है। क्या वास्तव में आप करना चाहते हैं? क्योंकि मुझे संदेह है कि यह इसे प्राप्त नहीं करेगा। –
जांचें http://asyncenum.codeplex.com/ – daryal
मैं इस फ़ंक्शन को वर्कर थ्रेड पर स्ट्रीम के साथ काम करने के लिए चलाने और UI थ्रेड पर प्रतीक्षा परिणाम का उपभोग करना चाहता हूं। – user2341923