आरएक्स चलती - औसत


वित्त डोमेन में, हमें आम तौर पर समय-सीमा डेटा की धारा से चलती-विंडो कुल मूल्य की गणना करने की आवश्यकता होती है, उदाहरण के लिए चलती हुई औसत का उपयोग करें, कहते हैं कि हमारे पास निम्न डेटा स्ट्रीम है T समय का टिकट है और V वास्तविक विले है। एक चलती औसत 3 जो हम प्राप्त करते हैं। चलती औसत की गणना करने के लिए, ऐसा लगता है कि हम इसे कर सकते हैं। मूल धारा से एक अवलोकन करें। मूल धारा से एक अवलोकन, समूहों में मूल्यों को समेकित करके। कुल ऑपरेटर चरण 2 में अवलोकन के अंतिम परिणामों की गणना करने के लिए। चरण 1 और 3 को लागू करने के लिए तुच्छ है, हालांकि, चरण 2 के लिए यह लगता है कि वर्तमान आरजेएसवा में चलती-खिड़कियां समूहों का निर्माण करने के लिए ऑपरेटर नहीं है, विंडो समूह ऑपरेटर नहीं लगता है इस मामले में फिट है, और मुझे मौजूदा ऑपरेटरों से समाधान तैयार करने का कोई आसान तरीका नहीं मिल सकता है, कोई भी सुझाव देता है कि यह कैसे सुंदर ढंग से आरजेक्सवा में किया जाए। 28 दिसंबर को 6 9 को प्रकाशित किया गया था। 29. मैं इसे इस तरह पसंद करता हूं मैं खिड़की का उपयोग करता हूं जो ऑबोबैबल्स का उत्सर्जन करता है, जो कि ओएनएल वाई एक निरंतर मात्रा की स्मृति का प्रयोग करता है और बफर नहीं है जो सूचियों का उत्सर्जन करता है, जो उनके प्रत्येक आइटम के लिए स्मृति का उपभोग करता है। यह एक उदाहरण है कि आप अपने स्वयं के छोरों को लिखने के बजाय संयोजक ऑपरेटरों का उपयोग कैसे कर सकते हैं,.अद्यतन यदि आप स्ट्रीम के अंत में खिड़कियों को फ़िल्टर करना चाहते हैं जिसमें कम से कम तत्व हैं, तो आप ऐसा कर सकते हैं। मैंने स्काला को चुना क्योंकि इसे लिखना कम है, लेकिन जावा में, आप ऐसा कर सकते हैं, बस ध्यान दें कि स्काले की गलती को जावा में कम किया जाता है। उत्तर में 22 जनवरी, 14 22 जनवरी को उत्तर। प्रैक्टिकल आरएक्स प्रशिक्षण लंदन 6-7 अक्टूबर 2015। लेखक की ओर से प्रस्तुत किया गया। भाग 1 - आरंभ करना.उपयोगकर्ता वास्तविक समय डेटा की उम्मीद करते हैं वे अब उनके ट्वीट्स चाहते हैं, अब उनके आदेश की पुष्टि हुई है अब उनके अनुसार कीमतें सही हैं उनके ऑनलाइन गेम को उत्तरदायी होना चाहिए एक डेवलपर के रूप में, आप आग - संदेश भूल जाओ आप किसी परिणाम के लिए अवरुद्ध अवरुद्ध नहीं करना चाहते हैं आप परिणाम तैयार करना चाहते हैं जब आप तैयार हो जाते हैं, तो भी बेहतर, परिणाम सेट के साथ काम करते समय, आप व्यक्तिगत परिणाम प्राप्त करना चाहते हैं क्योंकि वे तैयार हैं आप नहीं चाहते हैं पूरे सेट की प्रतीक्षा करने से पहले पहली पंक्ति देखने से पहले दुनिया को उपयोगकर्ताओं को धकेलने में स्थानांतरित कर दिया गया है, हमें पकड़ने के लिए इंतजार कर रहे हैं डेवलपर्स के डेटा को पुश करने के लिए उपकरण हैं, यह आसान है डेवलपर्स को डेटा को पुश करने के लिए प्रतिक्रिया करने के लिए उपकरण की आवश्यकता होती है। आरएक्स के लिए एक्सटेंशन यह पुस्तक किसी भी विकास के उद्देश्य से है IObservable T और IObserver टी इंटरफेस के बारे में उत्सुक है जो 4 में पॉप अप हुए हैं माइक्रोसॉफ्ट के रिएक्टिव एक्सटेंशन लाइब्रेरी इन इंटरफेस के कार्यान्वयन हैं जो सर्वर, क्लाइंट और वेब डेवलपर्स के साथ त्वरित रूप से कर्षण उठा रहे हैं आरएक्स एक शक्तिशाली उत्पादक डेवलपमेंट टूल आरएक्स डेवलपर्स को एक सुरुचिपूर्ण, परिचित और घोषणात्मक शैली में समस्याएं हल करने में सक्षम बनाता है, जो अक्सर कम से कम कोड के साथ आरएक्स के बिना संभव हो, LINQ को लाभ पहुंचाते हुए, आरएक्स को एक LINQ कार्यान्वयन के मानक लाभ पर गर्व हो जाता है। एकीकृत LINQ सी भाषा में एकीकृत है LINQ आपको आराम से LINQ से एसक्यूएल, LINQ से XML या LINQ पर ऑब्जेक्ट्स को प्रस्ताव में डेटा के लिए क्वेरी करने के लिए अपने मौजूदा कौशल का लाभ उठाने की अनुमति देता है आप आरएक्स को घटनाओं के लिए LINQ के रूप में सोच सकते हैं LINQ आपको अन्य मानदंडों से एक सामान्य प्रतिमान में संक्रमण की अनुमति देता है उदाहरण के लिए आप एक मानक इवेंट, एक एसिंक्रोनस विधि कॉल, एक टास्क या शायद 3 जी पार्टी मिडलवेयर एपीआई को एक साथ जोड़ सकते हैं। mmon rx paradigm पसंद की हमारी मौजूदा भाषा का प्रयोग करके और परिचित ऑपरेटरों का उपयोग कर जैसे समूह बाय आदि का चयन करें, डेवलपर्स एक सामान्य रूप में डिज़ाइन या कोड को तर्कसंगत और संवाद कर सकते हैं एक्स्टेंसिबल आप अपने खुद के कस्टम क्वेरी ऑपरेटर विस्तार विधियों के साथ आरएक्स बढ़ा सकते हैं। घोषणात्मक LINQ आपके कोड की अनुमति देता है आपके कोड की घोषणा के रूप में पढ़ने के लिए और कैसे ऑपरेटर के कार्यान्वयन को छोड़ देता है कंपोज़ योग्य LINQ विशेषताएं, जैसे विस्तार विधियां, लैम्ब्डा सिंटैक्स और क्वेरी समझ वाक्यविन्यास, डेवलपर्स के लिए एक धाराप्रवाह एपीआई प्रदान करने के लिए क्वेरीज़ का निर्माण कई तरह से किया जा सकता है ऑपरेटर प्रश्नों को तब समेकित प्रश्नों का उत्पादन करने के लिए एक साथ मिलकर बना सकते हैं ट्रांसफोर्मेटिव क्वेरीज़ उनके डेटा को एक प्रकार से दूसरे में बदल सकते हैं एक क्वेरी एक एकल मान को दूसरे मान में अनुवादित कर सकती है, मानों की अनुक्रम से एक औसत मान के लिए एकत्रित या एकल डेटा का विस्तार कर सकता है मूल्य मानों के क्रम में। जब आरएक्स उचित होता है। आरएक्स एक प्राकृतिक प्रतिमान प्रदान करता है घटनाओं के अनुक्रमों से निपटना एक अनुक्रम में शून्य या अधिक घटनाएं हो सकती हैं घटनाओं के क्रम को बनाते समय आरएक्स सबसे अधिक मूल्यवान साबित होता है। आरएक्स का उपयोग करना चाहिए। ऐसे प्रबंधन इवेंट जैसे आरएक्स के लिए बनाया गया था। यूआई घटनाएं जैसे माउस चाल, बटन क्लिक करें। संपत्ति की तरह बदलती घटनाएं, संग्रह अद्यतन, आदेश भरा हुआ, पंजीकरण स्वीकार किया गया। फ़ाइल वॉचर, सिस्टम और डब्ल्यूएमआई इवेंट से इन्सुराइजेशन इवेंट। एक संदेश बस से प्रसारण या वेबसाकेट एपीआई या निर्विण जैसी अन्य कम विलंबता वाले मिडलवेयर स्ट्रीम इन्सटेंड या स्ट्रीमबेज जैसी सीईपी इंजन के साथ एकीकरण। दिलचस्प है कि एसक्यूएल सर्वर परिवार का हिस्सा है माइक्रोसॉफ्ट के सीईपी उत्पाद स्ट्रीम इन्साइंस भी डेटा की स्ट्रीमिंग इवेंट्स पर प्रश्न बनाने के लिए LINQ का प्रयोग करता है। आरएक्स भी संगामिति को शुरू करने और प्रबंधित करने के लिए अनुकूल है ऑफलोडिंग का उद्देश्य यही है कि मौजूदा थ्रेड को मुक्त करने के लिए समवर्ती काम का एक निर्धारित सेट करना इसका एक बहुत ही लोकप्रिय उपयोग एक उत्तरदायित्व को बनाए रखना है ve यूआई. आप को आरएक्स का उपयोग करने पर विचार करना चाहिए अगर आपके पास मौजूदा आईएनइमरैबल टी है जो प्रस्ताव में डेटा के मॉडल की कोशिश कर रहा है, जबकि आईईएन्युमेरेटेबल टी ऑलएज रिटर्न की तरह आलसी मूल्यांकन का उपयोग करके गतिमान डेटा मॉडल कर सकता है, संभवतः यह एक IEnumerable टी एक धागे ब्लॉक का प्रयोग करें आपको या तो IObservable T के माध्यम से आरएक्स के गैर अवरुद्ध प्रकृति के पक्ष में होना चाहिए या 4 5 में async सुविधाओं पर विचार करें। Rx. Rx का उपयोग कर सकते हैं भी एसिंक्रोनस कॉल के लिए उपयोग किया जा सकता है ये प्रभावी रूप से एक ईवेंट के दृश्य हैं। एक टास्क या टास्क टी। एपीएम विधि कॉल की तरह FileStream BeginReadEndRead। आप टीपीएल, डेटाफ्लो या एसिंक कीवर्ड का उपयोग कर सकते हैं 4 5 एसिंक्रोनस तरीके तैयार करने का एक और अधिक प्राकृतिक तरीका साबित होता है, जबकि Rx निश्चित रूप से इन परिदृश्यों में मदद कर सकता है, अगर आपके निपटान में अन्य उपयुक्त फ्रेमवर्क हैं तो आपको उन पर पहले विचार करना चाहिए। आरएक्स इस्तेमाल किया जा सकता है, लेकिन स्केलिंग के प्रयोजनों के लिए संवादात्मकता को पेश करने और प्रबंधित करने के लिए कम अनुकूल है, या समानांतर कंप्यूटिंग सुविधाएं अन्य समर्पित फ़्रेमवर्क जैसे टीपीएल टास्क समानांतर लाइब्रेरी या सी एएमपी समानांतर गणना गहन कार्य करने के लिए अधिक उपयुक्त हैं। आरएक्स और विशेष रूप से IObservable T, IEnumerable TI के लिए कोई प्रतिस्थापन नहीं है जो कुछ ऐसा करने की कोशिश नहीं करेगा जो स्वाभाविक रूप से आधारित खींचती है धक्का आधारित हो। IObservable T के लिए मौजूदा IEnumerable T मानों को संशोधित करना सिर्फ इतना है कि कोड बेस अधिक Rx हो सकता है। संदेश पंक्तियां Queues जैसे MSMQ या JMS कार्यान्वयन में आम तौर पर लेन-देन होती है और परिभाषा अनुक्रमिक द्वारा होती है मुझे लगता है कि IEnumerable टी एक प्राकृतिक फिट है यहां काम करने के लिए सबसे अच्छा उपकरण चुनकर आपके कोड को बनाए रखने के लिए आसान होना चाहिए, बेहतर प्रदर्शन प्रदान करना और आपको संभवतः बेहतर समर्थन मिलेगा। कार्यवाही में आरएक्स। रीडिंग और सीखना आरएक्स एक चलने वाला तरीका हो सकता है, जहां आप धीरे-धीरे इसे अपने बुनियादी ढांचे और डोमेन थोड़े समय में आपको कोड तैयार करने, मौजूदा कोड को कम करने, सरल ऑप्शन से जुड़े प्रश्नों के लिए कौशल प्राप्त करने में सक्षम होना चाहिए। उदाहरण के लिए, यह सरल ViewModel मुझे एक खोज को एकीकृत करने के लिए कोड की जरूरत है, जिसे उपयोगकर्ता प्रकार के रूप में निष्पादित किया जाता है। सार्वजनिक वर्ग सदस्यशोधव्वेलमॉडेल INotifyPropertyChanged। जबकि यह कोड स्निपेट काफी छोटा है, यह निम्नलिखित आवश्यकताओं का समर्थन करता है.एक उत्तरदायी UI का समर्थन करता है। समर्थन समय समाप्त होने पर. जब खोज पूरा हो जाता है। जब एक बार एक बार वापस आने के लिए परिणामों की अनुमति होती है। त्रुटियों को हटा दें। एक इकाई परीक्षण योग्य है, सहमति के साथ भी। अगर कोई उपयोगकर्ता खोज बदलता है, तो वर्तमान खोज को रद्द करें और नए टेक्स्ट के साथ नई खोज निष्पादित करें। इस नमूने का निर्माण करने के लिए लगभग एक ऑपरेटर की रचना करने का मामला है जो एक एकल क्वेरी में आवश्यकताओं से मेल खाता है क्वेरी छोटी, प्रमेय, घोषणात्मक और अपने खुद के रोलिंग की तुलना में बहुत कम कोड है एक अच्छी तरह से परीक्षण किए गए API का पुन: उपयोग करने का अतिरिक्त लाभ है कम कोड आपको लिखना होगा, कम कोड का परीक्षण करना, डिबग करना और रखरखाव करना जैसे अन्य प्रश्नों को बनाना आसान है। मूल्यों की एक श्रृंखला के चलती औसत जैसे कि सेवा लेव एक्सेलरमीटर, गैयरो, मैगनेटोमीटर या तापमानग्राफिंग डेटा जैसे विषय या उपयोगकर्ता द्वारा ट्वीट्स, या डेल्टा या तरलता द्वारा स्टॉक की कीमतों से बीगल, गूगल और याहू या सेंसर डेटा से कई खोजों से औसत लुटेन्सेस या डाउनटाइमिंग इवेंट डेटा के लिए अल समझौता एक डेटा के लिए, एक विशेष गेम के लिए या न्यूनतम प्रतिभागी के साथ ऑनलाइन गेम सर्वर। पुश यहां आरएक्स के साथ अपने आप को आर्मिंग करना एक धक्का देने वाली दुनिया के उपयोगकर्ताओं की उम्मीदों को पूरा करने का एक शक्तिशाली तरीका है। आरएक्स आप आने वाले ईवेंट प्रसंस्करण की जटिलताओं का कम काम करने में सक्षम होंगे आरएक्स आपके कोडिंग अनुभव का एक दिन-प्रतिदिन हिस्सा बनने के लिए तैयार है। अतिरिक्त अनुशंसित पढ़ना। ली के कैंपबेल आरएक्स प्रज्वलित संस्करण 2012 के परिचय। संयोग का अंतर। इस पुस्तक के भाग में अब तक एक काफी स्वतंत्र अवधारणा को संबोधित किया है कुंजी प्रकार, लाइफटाइम प्रबंधन, एनामॉर्फिज़्म, कैटोरॉर्फिज़्म, बाइंडिंग, फ्लो कंट्रोल, शेड्यूलिंग और टेस्टिंग I एन के पहले अध्यायों में हमने SelectMany Merge Zip Concat आदि जैसे ऑपरेटरों के साथ कई अनुक्रमों को संयोजन करने पर विचार किया है। ये ऑपरेटर इस अध्याय में ऑपरेटर की तुलना में थोड़ा अधिक सरल हैं। यह अंतिम अध्याय इन विषयों में से कई को जोड़ता है ताकि हम समवर्ती दृश्यों में हेरफेर करने में सक्षम हो सकें, या संयोग की घटनाएं। हम उन घटनाओं की कल्पना कर सकते हैं जिनके पास खिड़की होने की अवधि होती है उदाहरण सर्वर हैं, एक व्यक्ति एक कमरे में है, बटन दबाया जाता है और अभी तक जारी नहीं किया जाता है ये समय के इस विंडो के लिए फिर से शब्दबद्ध हो सकते हैं, सर्वर ऊपर था जब खिड़कियां ओवरलैप होती हैं, वे समय में मेल खाते हैं। बैफर रिवाइन्ट। बफर हमारे लिए एक नया ऑपरेटर नहीं है, लेकिन अब इसे विंडो ऑपरेटर के साथ अवधारणाबद्ध रूप से समूहीकृत किया जा सकता है ये ऑपरेटर सभी एक अनुक्रम और एक विंडो के साथ कुछ करते हैं समय प्रत्येक ऑपरेटर विंडो खोलते हैं, जब स्रोत अनुक्रम एक मूल्य उत्पन्न करता है जिस तरह से खिड़की बंद होती है और जो मूल्य सामने आते हैं, वह प्रत्येक ऑपरेटर के बीच मुख्य अंतर है। हम पुरानी मित्र बफर के आंतरिक काम को तुरंत व्यवस्थित करते हैं और देखें कि यह नक्शे समय की खिड़कियों की अवधारणा को कैसे देखें। बफर एक विंडो बना देगा, जब पहली मान का उत्पादन होता है तब यह उस आंतरिक मूल्य को आंतरिक कैश में रखेगा खिड़की जब तक मूल्यों की गिनती तक नहीं पहुंचे, इन मूल्यों में से प्रत्येक को कैश किया गया होगा अब जब गिनती तक पहुंच गई है तो खिड़की बंद हो जाएगी और कैश ऑनैक्ल एड एक आईएलआईटी टी के रूप में होगा जब स्रोत से अगले मूल्य का उत्पादन होता है कैश साफ़ हो गया है और हम फिर से शुरू करते हैं इसका मतलब यह है कि बफर एक IObservable T लेगा और IObsworthable IList T. Example बफर को 3 की गिनती के साथ वापस करेगा। इस संगमरमर आरेख में, मैंने समय के रूप में एक बिंदु पर लौटाए गए मानों की सूची का प्रतिनिधित्व किया है आंकड़ों का एक स्तंभ अर्थात् 0, 1 2 के मूल्यों को पहले बफर में लौटा दिया गया है। इसे समझें यह समय के साथ बफर को समझने के लिए बहुत अधिक नहीं है। गिनती करने के बजाए हम टाइमस्पेन पास करते हैं विंडो के समापन और इसलिए बफर एस कैश अब उत्पादित मूल्यों की गिनती के बजाय समय से तय होता है यह अब-और अधिक जटिल है क्योंकि हमने अब किसी प्रकार का शेड्यूलिंग पेश किया है, सही समय पर IList टी का उत्पादन करने के लिए हमें समयबद्ध करने के लिए निर्दिष्ट शेड्यूलर की आवश्यकता होती है यह भी यह बहुत आसान परीक्षण करता है। 5 इकाइयों के समय के साथ उदाहरण बफर। नमूना Revisted. IObservable TSource इस IObservable TSource, IObservable TTick नमूना। खिड़की ऑपरेटरों बफर ऑपरेटरों के समान हैं, वे केवल वास्तव में उनके रिटर्न प्रकार से भिन्न होते हैं जहां बफर एक IObservable टी ले जाएगा और एक IObservable IList टी वापस लौटने के लिए खिड़की ऑपरेटरों एक IObservable IObservable टी वापसी यह नोट के लायक है कि बफर ऑपरेटरों उनके बफ़र्स उपज नहीं करेगा जब तक कि विंडो बंद हो जाता है। यहाँ हम खिड़की के लिए सरल अधिभार देख सकते हैं खिड़की और बफर अधिभार के साथ एक अतिसंवेदनशील सममित है। लोक स्थिर IObservable IObservable TSource विंडो TSource IObservable TSource स्रोत, int count. public स्थिर IObservable IObservable TSource खिड़की TSource इस IObservable TSource स्रोत, int गिनती, int skip. public स्थिर IObservable IObservable TSource विंडो TSource इस IObservable TSource स्रोत, समयक्षेत्र समय एसपीएस। लोक static IObservable IObservable TSource खिड़की TSource इस IObservable TSource स्रोत, समयक्षेत्र समयस्पेन, int गिनती। सार्वजनिक स्थिर IObservable IObservable TSource विंडो TSource IObservable TSource स्रोत, टाइमस्पेन टाइमस्पेन, टाइमस्पेन टाइमशैफ्ट। लोक स्थिर IObservable IObservable TSource विंडो TSource IObservable TSource स्रोत, टाइमस्पेन टाइमस्पेन, IScheduler अनुसूचक। लोक स्थिर IObservable IObservable TSource विंडो TSource इस IObservable TSource स्रोत, समयक्षेत्र समयस्पेन , टाइमस्पेन टाइमशफ्ट, आईएसकेड्यूलर शेड्यूलर. पैकेजिक स्टेटस IObservable IObservable TSource Window TSource IObservable TSource स्रोत, टाइमस्पेन टाइमस्पेन, इंट गेट्स, आईएसकेड्यूलर शेड्यूलर। खिड़की का उदाहरण 3 इकाइयों के समय के साथ खिड़की के उदाहरण। एक बड़ी संख्या ई हम यहां देखते हैं कि विंडो ऑपरेटर आपको स्रोत से मूल्यों के बारे में सूचित कर सकते हैं जैसे ही वे उत्पादित हो जाते हैं बफ़र ऑपरेटरों को प्रतीक्षा करनी चाहिए जब तक कि मानों को पूरी सूची के रूप में अधिसूचित करने से पहले विंडो बंद होनी चाहिए। खिड़की के ऑपरेशन को फ़्लैटिंग करना। मुझे लगता है कम से कम एक अकादमिक बिंदु से ध्यान देने योग्य है, कि विंडो ऑपरेटर IObservable IObservable T का उत्पादन करते हैं हमने एकत्रीकरण Concat मर्ज और स्विच पर पहले अध्याय में नेस्टेड अवलोकनों की अवधारणा का पता लगाया है, प्रत्येक में एक ओवरलोड है जो IObservable IObservable T लेता है और एक देता है IObservable T जैसा कि विंडो ऑपरेटर्स यह सुनिश्चित करते हैं कि खिड़कियों के बाल अनुक्रम ओवरलैप नहीं करते हैं, हम किसी एक या दोवें अनुक्रम को अपने मूल अनुक्रम में वापस करने के लिए कंसैट स्विच या मर्ज ऑपरेटर्स का उपयोग कर सकते हैं। उसी के रूप में है। वाटर स्विचेड विन्डो ऑब्ज़र्वर्वेटिव टाइमस्पैन। विन्डोविड्थ टाइमटायन। विंडोज को अनुकूलित करना। उपरोक्त ओवरलोड्स एक छोटे से नेस्टेड विंडो में गिनती या समय अवधि का उपयोग करके एक क्रम को तोड़ने के लिए सरल तरीके प्रदान करते हैं अब हम आपको जो ओवरलोड प्रदान करते हैं आपकी विंडो कैसे प्रबंधित की जाती है इसके बारे में और अधिक लचीलापन लगातार गैर-अतिव्यापी विंडो में एक अनुक्रमिक अनुक्रम के प्रत्येक तत्व परियोजनाएं windowClosingSelector उत्पादित विंडो की सीमाओं को परिभाषित करने के लिए एक फ़ंक्शन लागू किया गया है एक नई विंडो शुरू की जाती है, जब पिछली बार बंद हो जाता है। जनक स्थिर IObservable IObservable TSource Window TSource, TWindow इस IObservable TSource स्रोत को बंद कर रहा है, फ़ंक् IObservable TWindowClosing windowClosingSelector. The इन जटिल ओवरलोड की पहली अनुमति देता है हमें खिड़कियों के बंद होने पर नियंत्रण करने के लिए विंडो को बंद करना चुने गए सिलेक्टर फ़ंक्शन को हर बार बुलाया जाता है जब खिड़की बनाई जाती है Windows सब्सक्रिप्शन पर बनाया जाता है और विंडो के बंद होने के तुरंत बाद विंडोज बंद हो जाता है जब विंडो से चुने हुए चयनकर्ता एक मान का उत्पादन करता है मान मानी जाती है, अनुक्रम मूल्यों का प्रकार वास्तव में आप खिड़की को बंद करने के लिए खिड़की बंद करने वाले चयनकर्ता से अनुक्रम को पूरा भी कर सकते हैं। इस उदाहरण में हम एक खिड़की बंद चयनकर्ता के साथ एक खिड़की बनाते हैं, हम प्रत्येक बार चयनकर्ता से एक ही विषय को वापस देते हैं, और विषय से सूचित करते हैं जब कोई उपयोगकर्ता कंसोल. वर विंडो से प्रवेश करता है wIdx 0.var स्रोत अवलोकन समयस्पैन। करीब करीब नए विषय इकाई। करीब। खिड़की का सबसे जटिल अधिभार हमें संभावित रूप से अतिव्यापी खिड़कियां बनाने की अनुमति देता है। शून्य या अधिक खिड़कियों में एक अनुक्रमित अनुक्रम के प्रत्येक तत्व परियोजनाएं। खिड़की ओपनिंग्स अवलोकनशील अनुक्रम जिसका तत्व नई खिड़कियों के निर्माण को दर्शाते हैं। windowClosingSelector प्रत्येक फ़ंक्शन विंडो के बंद को परिभाषित करने के लिए एक फ़ंक्शन लागू किया गया है। लोक स्थिर IObservable IObservable TSource विंडो TSource, TWindowOpening, TWindow इस IObservable TSource स्रोत को बंद कर रहा है, IObservable Twindow खोलना विंडो ओपनिंग्स, फ़ंक् TWindowOpening, IObservable TWindowClosing windowClosingSelector. This अधिभार 3 तर्क लेता है। स्रोत अनुक्रम एक अनुक्रम जो इंगित करता है कि जब कोई नई विंडो खोली जानी चाहिए। एक फ़ंक्शन जो विंडो खोलने का मान लेता है, और एक विंडो समापन अनुक्रम देता है। यह अधिभार खिड़कियों के खुले और बंद होने के तरीके में बहुत लचीलेपन प्रदान करता है Windows एक दूसरे से काफी हद तक स्वतंत्र हो सकते हैं वे ओवरलैप हो सकता है, आकार में भिन्नता है और यहां तक ​​कि स्रोत से मूल्यों को छोड़ें। इस अधिक जटिल अधिभार में अपना रास्ता कम करने के लिए, आइए पहले इसका उपयोग करने के लिए ओवरलोड की विंडो का एक और सरल संस्करण बनाने के लिए इसे उपयोग करने का प्रयास करें। अंतःविषय सदस्यता पर एक विंडो खोलने के लिए और हर बार जब स्रोत ने उत्पादन किया है, तो निर्दिष्ट गिनती T वह खिड़की हर बार स्रोत को निर्दिष्ट गिनती का निर्माण करने की आवश्यकता होती है इसे प्राप्त करने के लिए हमें केवल स्रोत अनुक्रम की आवश्यकता होती है, हम इसे प्रकाशित विधि का उपयोग करके साझा करेंगे और फिर स्रोत के विचारों को प्रत्येक तर्क के रूप में प्रदान करेंगे। लोक स्थिर IObservable IObservable T MyWindow यह IObservable टी स्रोत, एंट काउंट। वर्गा विंडो एड्ज साझा किया गया है.इस पर विचार करने के लिए भी रुचि हो सकती है कि आप नमूना या खिड़की के साथ थ्रॉटल जैसे अन्य समय के तरीके को कैसे बदल सकते हैं। ऑपरेटर में शामिल होने से आपको दो अनुक्रमों में शामिल होने की सुविधा मिलती है जहां ज़िप ऑपरेटर इंडेक्स द्वारा दो सैकेंज में एक साथ जुड़ने के लिए, आपसे जुड़ने वाली विंडो में विंडो को एक दूसरे से जोड़कर अनुक्रम में शामिल होने की अनुमति देता है हम सिर्फ अंतिम विंडो ओवरलोड की तरह देखते हैं, जब आप विंडो को एक फ़ंक्शन से बंद कर देते हैं, जो कि एक ओपनिंग वेल्यू को बंद कर देता है और यह इंगित करने के लिए एक अनुक्रमिक अनुक्रम देता है जब विंडो बंद होनी चाहिए, सम्मिलित हों ऑपरेटर के पास दो ऐसे फ़ंक्शंस हैं, एक पहला स्रोत अनुक्रम के लिए और दूसरे स्रोत अनुक्रम के लिए एक है जैसे कि ज़िप ओपेरा r हमें मूल्यों की जोड़ी से परिणाम वस्तु का उत्पादन करने के लिए एक चयनकर्ता कार्य प्रदान करने की भी आवश्यकता है। लोक स्थिर IObservable TresultTLeft, ट्रॉफ़्ट, TlftDuration, ट्रस्ट ड्यूरेशन, ट्रेशल में शामिल हों। IObservable TLeft left. IObservable TRight right. Func TLeft, IObservable TLftDuration leftDurationSelector. Func TRight, IObservable TRightDuration rightDurationSelector. Func TLeft, TRight, TResult result. Selector. Now यह एक बार में कोशिश करने और समझने के लिए एक काफी बालों वाला हस्ताक्षर है, इसलिए इसे एक समय में एक पैरामीटर लेना चाहिए। आइएब्सव्व्ववेबल टीलेफ़्ट स्रोत अनुक्रम है जो परिभाषित करता है जब एक विंडो शुरू होती है यह बफ़र और विंडो ऑपरेटर की तरह है, सिवाय इसके कि इस स्रोत से प्रकाशित प्रत्येक मान एक नई विंडो खोलता है बफ़र और विंडो में कुछ मान सिर्फ एक मौजूदा विंडो में गिर गए हैं। मुझे लगता है कि IObservable ट्रैक्ट को विंडो मान अनुक्रम जबकि बाएं अनुक्रम विंडो को खोलने पर नियंत्रण करता है, तो सही अनुक्रम बायां अनुक्रम से एक मूल्य के साथ जोड़े जाने का प्रयास करेगा। हमें यह सोचने की कोशिश करें कि हमारे बाएं अनुक्रम एक मूल्य उत्पन्न करता है, जो एक नई विंडो बनाता है यदि सही अनुक्रम एक मूल्य उत्पन्न करता है, जबकि विंडो खुली होती है तो परिणामस्वरूप चयनकर्ता का चयन दो मानों के साथ होता है यह एक जुड़ने से जुड़ा हुआ है, जिसमें अनुक्रम से दो मान जोड़े हैं एक ही विंडो में यह तब हमारे अगले प्रश्न की ओर ले जाता है जब विंडो बंद होती है, इस प्रश्न का उत्तर दोनों में जुड़ने के ऑपरेटर की शक्ति और जटिलता है। जब कोई मूल्य उत्पन्न करता है, तो एक खिड़की खोली जाती है उस मान को तब पारित किया जाता है बाएं अंशकालिक चयनकर्ता फ़ंक्शन इस फ़ंक्शन का परिणाम IObservable TLeftDuration है जब यह अनुक्रम एक मूल्य का उत्पादन करता है या पूर्ण करता है तो उस मान के लिए विंडो बंद हो जाती है ध्यान दें कि यह अप्रासंगिक है कि किस प्रकार का TLeftDuration है यह शुरू में मुझे यह महसूस कर रहा था कि IObservable TLeftDuration सभी को मारना एक बिट के रूप में आप प्रभावी रूप से बस कुछ प्रकार की घटना की जरूरत है बंद कहने के लिए हालांकि आप IObservable टी का उपयोग करने की अनुमति देकर आप कुछ चालाक सामान कर सकते हैं क्योंकि हम बीमार बाद में देखें। तो हम पहले एक ऐसी स्थिति की कल्पना करें जहां हमारे पास बाएं अनुक्रम दो बार उतना ही सही अनुक्रम के रूप में मूल्यों का उत्पादन करते हैं कल्पना कीजिए कि हम भी खिड़कियों को कभी भी बंद नहीं करते हैं हम इसे हमेशा से छोड़ दिया इकाई से छोड़कर डिस्कवर सेलेक्टोर फंक्शन के परिणामस्वरूप निम्नलिखित जोड़ों का उत्पादन किया जा रहा है। जैसा कि आप देख सकते हैं कि बाएं मूल्य कैश किए गए हैं और हर बार सही मूल्य का उत्पादन करते हैं। फिर यह काफी स्पष्ट होता है कि अगर मैं तुरंत यूनिट वापस करके खिड़की बंद कर देता या शायद वह खिड़कियां कभी नहीं खोली जाएंगी जोड़े कभी भी तैयार हो सकेंगी लेकिन मैं यह सुनिश्चित करने के लिए क्या कर सकता हूं कि ये विंडो ओवरलैप नहीं हुईं, ताकि दूसरा मान एक बार उत्पन्न हो जाए, अब मैं पहले मान नहीं देख सकता था, ठीक है, अगर हम बाएं अनुक्रम को बाएं दौर से वापस कर चुके हैं, लेकिन रुको, जब हम बाएं से बाईं ओर लौटे तो निर्णायक चयनकर्ता यह एक और सदस्यता बनाने की कोशिश करेगा और इससे साइड इफेक्ट मिल सकते हैं इसका त्वरित उत्तर प्रकाशित करना है और बाएं अनुक्रम को RefCount करें यदि हम ऐसा करते हैं तो परिणाम इसके जैसा दिखते हैं। अंतिम उदाहरण संयोजन से बहुत ही समान है, सिवाय इसके कि यह केवल एक जोड़ी का निर्माण कर रहा है जब सही अनुक्रम में परिवर्तन होता है हम उपयोग कर सकते हैं CombineLatest का अपना संस्करण बनाने के लिए सम्मिलित करें यदि मूल्य बाएं अनुक्रम की समय सीमा समाप्त होने पर जब बाएं से अगले मूल्य अधिसूचित किया गया था, तब मैं अपने रास्ते पर अच्छी तरह से रहूंगा। लेकिन मुझे इसके लिए सही होने की आवश्यकता है सौभाग्य से सम्मिलित ऑपरेटर भी हमें सही अधिकार प्रदान करता है। चयनकर्ता जो सिर्फ बाएं की तरह काम करता है निर्णायक चयनकर्ता यह सरल है कार्यान्वित करने के लिए, मुझे जो भी करना है, वही बाएं क्रम के संदर्भ वापस लौटाया जाता है जब एक बाएं मान तैयार होता है और फिर सही के लिए समान होता है कोड इस तरह दिखता है। लोक स्थिर IObservable Tresult MyCombine नवीनतम ट्राइट, ट्रॉफ़्ट, ट्रेशल।.ऑब्सस्वावेबल ट्रাইট सही। जबकि ऊपर कोड उत्पादन की गुणवत्ता नहीं है, तो दौड़ की स्थिति को कम करने के लिए कुछ फाटकों की आवश्यकता होगी, यह हमें उस शक्ति को दिखाती है जो हम कर सकें शामिल होने के साथ जुड़ें, हम दूसरे ऑपरेटरों को बनाने के लिए वास्तव में इसका उपयोग कर सकते हैं। जब एक विंडो के भीतर जुड़ने वाले मूल्यों में सम्मिलित ऑपरेटर जोड़े जाते हैं, तो यह केवल बाएं मूल्य और परिणाम के लिए सही मूल्य का उत्पादन करता है। चयनकर्ता समूहजैन ऑपरेटर इस एक कदम को आगे ले जाता है परिणाम के लिए तुरंत बाएं मान गुजर रहा है। चुने हुए विंडो के भीतर होने वाले सही मानों के अनुक्रम के साथ चयनकर्ता यह हस्ताक्षर जुड़ने के समान है, लेकिन परिणाम में अंतर को ध्यान में रखते हैं। चयनकर्ता आनन्द। सार्वजनिक स्थिर IObservable TResult GroupJoin TLeft, TRight, TLftDuration, TRightDuration, TResult. this IObservable TLeft left. IObservable TRight right. Func TLeft, IObservable TLeftDuration leftDuration. Selector. Func सही, IObservable trightduration rightDurationSelector. Func TLeft, IObservable TRight, TResult परिणाम चयनकर्ता। अगर हम वापस हमारे पहले शामिल उदाहरण में जहां हम था। उत्पादन छोड़ दिया सही के रूप में दो बार के रूप में तेजी से मूल्य। कभी नहीं expiring. the सही तुरंत समाप्त हो रहा है। यह परिणाम क्या है ऐसा लग सकता है। अब हम इसे स्विच कर सकते हैं और यह है कि बाएं का समय समाप्त हो गया और तुरंत नतीजा हुआ नतीजा कभी नतीजे नज़र आ सकता है। यह चीजों को दिलचस्प बनाने के लिए शुरू होता है, यह देख सकता था कि समूह जॉइन के साथ आप प्रभावी ढंग से पुन: निर्माण कर सकते हैं इस तरह से कुछ करके अपनी स्वयं की सम्मिलित हों। जन IObservable TResult MyJoin TLeft, TRight, TlftDuration, TRightDuration, TResult. Observable TLeft left. IObservable TRight right. Func TLeft, IObservable TLeftDuration leftDurationSelector. Func सही, IObservable TrightDuration rightDuration. Selector. Func TLeft, TRight, ट्रेशल्ट परिणामसचिव।

Comments