2013-01-19 37 views
5

कहा जाता है जब पर्यवेक्षक को क्या करना चाहिए I मेरा प्रोजेक्ट में IObserver/IObservable इंटरफेस का उपयोग कर रहा हूं।IObserver - IObserver.OnError को

CommandReader एक IObservable जो लगातार एक धारा से डेटा पढ़ता है और उसके बाद को पास कर अपने CommandHandlerIObserver (रों)।

जब अंतर्निहित धारा बंद कर दिया है (उदाहरण के लिए कनेक्शन मर जाता है) तो मैं IObserver.OnError(exception) विधि

पर्यवेक्षक जब यह इस सूचना प्राप्त होता है क्या करना चाहिए के साथ पर्यवेक्षकों को सूचित करेंगे? क्या इसे खुद को देखने योग्य से मुक्त करना चाहिए? या यह है कि माता-पिता वर्ग की ज़िम्मेदारी?

उत्तर

3

स्टार्टर्स के लिए आपको आम तौर पर अपने IObservable और IObserver ऑब्जेक्ट्स को लागू नहीं करना चाहिए। आपका प्रश्न क्यों संकेत देता है। अंतर्निहित व्यवहार को सही करना बहुत मुश्किल है।

अब प्रत्येक कॉल IObservable.Subscribe पर IDisposable देता है। इसका उपयोग तब किया जाता है जब Subscribe का कॉलर OnCompleted या OnError से पहले एक अवलोकन योग्य से सदस्यता समाप्त करना चाहता है। हालांकि, अगर OnCompleted या OnError कहा जाता है तो IDisposable स्वचालित रूप से निपटाया जाता है। एक अवलोकन योग्य संग्रह पूरा होने पर प्रभावी रूप से आरएक्स स्वचालित रूप से स्वयं के बाद साफ हो जाता है।

प्रत्येक व्यक्ति पर्यवेक्षक को अपने स्वयं के सदस्यता जीवनकाल को प्रबंधित करने की आवश्यकता नहीं होती है। पर्यवेक्षक को केवल OnCompleted/OnError संदेश का जवाब देना होगा।

आपके कोड में मैं सुझाव दूंगा कि आप अपना कोड थोड़ा बदलना चाहते हैं। मुझे CommandReaderPublisher कक्षा Subscribe विधि के साथ CommandReader कक्षा से अधिक उपयुक्त होने की उम्मीद होगी। एक बार आरएक्स स्ट्रीम पूरा हो जाने पर इसका उपयोग जारी नहीं रह सकता है।

मुझे आश्चर्य है कि OnCompleted कॉलिंग OnError(exception) से बेहतर होगी जब अंतर्निहित धारा बंद हो जाती है। अगर कोई त्रुटि होती है तो यह ठीक है, लेकिन अगर यह बंद हो जाता है तो ONCompleted बेहतर हो सकता है।

+0

+1 IObserver/IObservable इंटरफेस को लागू न करें। आरएक्स लाइब्रेरी का प्रयोग करें। अवलोकन योग्य। बनाएं/जेनरेट/इत्यादि हैं कि आप एक अवलोकन अनुक्रम कैसे बनाते हैं और सब्सक्रिप्शन एक्सटेंशन विधियां हैं कि आप उपभोक्ता को एक अवलोकन अनुक्रम कैसे बनाते हैं। www.IntroToRx.com। –

0

मैं सुझाव दूंगा कि यह पर्यवेक्षकों को अपनी सदस्यता सूची से हटाने के लिए IObservable का काम है। इसी प्रकार, यदि IObserver में IObservables की एक सूची है, तो IObserver को उस सूची का प्रबंधन करना चाहिए।