2012-01-13 10 views
7

एक IObservable<T> को देखते हुए भीतर जोड़ा वहाँ Throttle व्यवहार (एक टाइमर जब एक आइटम जोड़ा जाता है रीसेट का उपयोग करने के लिए एक रास्ता है, लेकिन यह है कि समय के भीतर जोड़ सभी वस्तुओं का संग्रह वापसी है?रिएक्टिव थ्रॉटल रिटर्निंग सभी आइटम TimeSpan

Buffer है कि यह हर बार अवधि या गिनती पर IList<T> में डेटा हिस्सा एक इसी तरह की सुविधा प्रदान करता है। लेकिन मैं हर बार एक आइटम जोड़ा जाता है पुनर्स्थापित करने के लिए उस समय की जरूरत है।

मैं यहाँ एक ऐसी ही सवाल देखा है, Does reactive extensions support rolling buffers?, लेकिन उत्तर आदर्श नहीं लगते हैं और यह थोड़ा पुराना है इसलिए मुझे आश्चर्य हुआ कि क्या आरएक्स-मेन का रिलीज़ संस्करण अब इसका समर्थन करता है बॉक्स के बाहर कार्यक्षमता।

+0

यह http://stackoverflow.com/a/7604825/259769 में मेरी 'BufferWithInactivity' जवाब की तरह लगता है आप जो चाह रहे हैं है। क्या आप अपने प्रश्न को स्पष्ट कर सकते हैं? – Enigmativity

+0

@ निष्क्रियता यह है, यह वास्तव में कार्यक्षमता है जिसके बाद मैं हूं। मैंने अपने प्रश्न में उस प्रश्न का संदर्भ दिया :) लेकिन मुझे वह जवाब पसंद नहीं है, उत्तर देने वाले ने स्पष्ट रूप से प्रगति पर यह काम किया है। – RichK

+0

सुनिश्चित नहीं है कि आप क्या पूछ रहे हैं। यदि टाइमर हर बार रीसेट हो जाता है तो कोई आइटम "जोड़ा" (प्रचारित होता है?) पहली जगह बफर करने के लिए कुछ भी कैसे होगा? – Asti

उत्तर

7

जैसा कि मैं answered in the other post, हाँ आप कर सकते हैं! Observable की Throttle और Window तरीकों का उपयोग करना:

public static IObservable<IList<T>> BufferUntilInactive<T>(this IObservable<T> stream, TimeSpan delay) 
{ 
    var closes = stream.Throttle(delay); 
    return stream.Window(() => closes).SelectMany(window => window.ToList()); 
} 
+0

अच्छा जवाब! लेकिन ठंडे अवलोकनों को दो बार सदस्यता लेने से बचने के लिए, 'वापसी स्ट्रीम' का उपयोग करके स्ट्रीम प्रकाशित नहीं करना चाहिए। (गर्म => ... ') प्रकाशित करें? – Ziriax

0

यह

Observable.BufferWithTimeOrCount<TSource> Method (IObservable<TSource>, TimeSpan, Int32) के साथ काम नहीं करेंगे?

+0

नहीं, समय घटक तत्काल लात जाएगा और उस समय तक सबकुछ बफर करेगा, और गिनती संख्याओं की संख्या को बफर कर देगी। जब कोई आइटम जोड़ा जाता है (जैसे थ्रॉटल) को रीसेट करने के लिए मुझे बफर समय की आवश्यकता होती है। – RichK

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