2010-03-05 8 views
7

एक व्यवहार विषय को देखते हुए, इन सभी कार्यों को कॉल करने के बीच व्यावहारिक अंतर क्या है?इन सभी प्रतिक्रियाशील अवलोकन योग्य एक्सटेंशन में व्यावहारिक अंतर क्या है?

  • पहले()
  • अंतिम()
  • LatestValue()
  • MostRecentValue()
  • NextValue()
  • एकल()
  • लें (1)

मान लीजिए कि मैं इसे सही समझता हूं, उन्हें सभी को वें करना चाहिए व्यवहार की वस्तु को देखते हुए, वही बात।

यदि ऐसा है, तो कौन सा कॉल सबसे उपयुक्त है (जिसके द्वारा मेरा मतलब है: जो मेरे इरादे से सबसे अच्छा संवाद करता है)? पहले या सिंगल शायद?

यदि नहीं, तो व्यावहारिक मतभेद क्या हैं?

उत्तर

6

पहला, अंतिम, और एकल अवरुद्ध कर रहे हैं; इसके बजाय टेक (1) का उपयोग करने की अनुशंसा की जाती है, इसलिए आपको एक IObservable वापस मिल जाता है। क्वेरी ऑपरेटरों को चेन करते समय इसे पहले, अंतिम और सिंगल से बचने की अनुशंसा की जाती है क्योंकि आप मोनैड की सुरक्षा से बाहर निकलते हैं ... यही कहना है कि आपने साइड इफेक्ट्स को अवरुद्ध कर दिया है। इसके बारे में अधिक जानने के लिए http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dangerous-yet-extremely-useful.aspx देखें।

अधिकांश रिजल्ट वैल्यू और नवीनतम वैल्यू को आरएक्स के नवीनतम संस्करण से हटा दिया गया है क्योंकि वे भी अवरुद्ध हो रहे हैं, इसलिए नवीनतम रिलीज नोट्स के मुताबिक, केवल अवरुद्ध ऑपरेटरों को छोड़ दिया गया है, पहला, अंतिम और एकल (और xxxOrDefault प्रकार)।

अधिकतर बार अंतिम मूल्य नमूना वापस कर देगा, जितनी बार आप इसे कॉल करते हैं (और यह गारंटी देने के लिए प्रारंभिक वैल्यू लेता है कि यह कभी भी इंतजार नहीं करेगा), यानी "खपत के बिना", जबकि नवीनतम मूल्य तब तक इंतजार करेगा जब तक कोई मूल्य नहीं आता है " खपत के साथ "- यानी, यदि आप फिर से नवीनतम कॉल करते हैं तो यह अंतिम कॉल के समान मूल्य वापस नहीं करेगा, यह तब तक इंतजार करेगा जब तक कि अगले मूल्य आने पर प्रतीक्षा न हो जाए।

0

महान उत्तर के लिए धन्यवाद @ रिचर्डहेन।

अवरुद्ध एक्सटेंशन विधियों को वास्तव में अपने नामस्थान में स्थानांतरित किया जाना चाहिए, इसलिए डेवलपर को विशेष रूप से उन्हें एक प्रोजेक्ट (या विशेष रूप से एक CS फ़ाइल) के लिए शामिल करना चुनना होगा। आप आरएक्स के साथ जटिलता का एक टन जोड़ते हैं, और गलती से एक अवरुद्ध विधि का उपयोग करके आप मूल रूप से IList/IEnumerable पर वापस जा रहे हैं।

मुझे लगता है कि यह आरएक्स टीम की सबसे बड़ी गलती है, मुझे लगता है कि डिफ़ॉल्ट रूप से इन्हें शामिल करके वे आरएक्स के साथ 'सफलता का गड्ढा' चूक गए। इसे ठीक करें और मैं सी # में सिंगल-थ्रेडेड + एसिंक से आगे बढ़ते समय आरएक्स को पसंद के एपीआई को कॉल करूंगा (यानी .NET एनईडीजेएस कहने से ज्यादा शक्तिशाली क्यों है)।

संबंधित मुद्दे